私がこれまで見てきたSFの質問は、MD5ハッシュパスワードを生成する回答につながりました。
SHA-512ハッシュ化パスワードを作成する提案はありますか?私はスクリプトではなく1つのライナーを使用したいと思いますが、スクリプトが唯一の解決策である場合は、それでも問題ありません。
以前のpy2バージョンをこのバージョンで置き換える:
python3 -c "import crypt;print(crypt.crypt(input('clear-text pw: '), crypt.mksalt(crypt.METHOD_SHA512)))"
ここにワンライナーがあります:
python -c 'import crypt; print crypt.crypt("test", "$6$random_salt")'
Python 3.3+には mksalt
in crypt が含まれているため、使用がはるかに簡単(かつ安全)です。
python3 -c 'import crypt; print(crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512)))'
crypt.mksalt
に引数を指定しない場合(crypt.METHOD_CRYPT
、...MD5
、SHA256
、およびSHA512
を受け入れる可能性があります)、使用可能な最も強力なものが使用されます。
ハッシュのID(最初の$
の後の番号)は、使用されるメソッドに関連しています。
ソルトとは何かなどを調べることをお勧めします。smallclamgersによると、暗号化とハッシュの違いについてコメントしています。
更新1:生成される文字列は、シャドウおよびキックスタートスクリプトに適しています。更新2:警告。 Macを使用している場合は、これの使用に関するコメントをpython Macで期待どおりに動作しないように見える)で参照してください。
Debianではmkpasswdを使用して、/ etc/shadowに適したさまざまなハッシュアルゴリズムでパスワードを作成できます。これは、whoisパッケージに含まれています(apt-fileによると)
mkpasswd -m sha-512
mkpasswd -m md5
利用可能なハッシュアルゴリズムタイプのリストを取得するには:
mkpasswd -m help
HTH
ベストアンサー:grub-crypt
Usage: grub-crypt [OPTION]...
Encrypt a password.
-h, --helpPrint this message and exit
-v, --version Print the version information and exit
--md5 Use MD5 to encrypt the password
--sha-256 Use SHA-256 to encrypt the password
**--sha-512 Use SHA-512 to encrypt the password (default)**
これは、さまざまなUnixタイプのOSでSHA-512パスワードを生成する短いCコードです。
ファイル:passwd-sha512.c
#define _XOPEN_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
if ( argc < 3 || (int) strlen(argv[2]) > 16 ) {
printf("usage: %s password salt\n", argv[0]);
printf("--salt must not larger than 16 characters\n");
return;
}
char salt[21];
sprintf(salt, "$6$%s$", argv[2]);
printf("%s\n", crypt((char*) argv[1], (char*) salt));
return;
}
コンパイルします:
/usr/bin/gcc -lcrypt -o passwd-sha512 passwd-sha512.c
使用法:
passwd-sha512 <password> <salt (16 chars max)>
Perl SHA-512ハッシュパスワードを生成するワンライナーソリューション:
Perl -le 'print crypt "desiredPassword", "\$6\$customSalt\$"'
RHEL 6で作業しました
この回答のセキュリティへの影響については、以下のコメントをご覧ください
Rubyの考え方については、ここでワンライナーです:
'password'.crypt('$6$' + Rand(36 ** 8).to_s(36))
シェルコマンドを使用してランダムなソルトでSHA-512ハッシュパスワードを作成するワンライナーは次のとおりです。
[root @ Host] mkpasswd -m sha-512 MyPAsSwOrD $(openssl Rand -base64 16 | tr -d '+ =' | head -c 16)
ノート
/ etc/shadowのすべてのパスワードハッシュがsha512で行われるように、Centos/RHELマシンに対して次のチェックと変更を実行してください。その後、passwdコマンドを使用して通常通りpassworkdを設定できます
#Set stronger password hasing
/usr/sbin/authconfig --test | grep sha512 > /dev/null
if [ $? -ne 0 ]; then
echo "Configuring sha512 password hashing"
Sudo /usr/sbin/authconfig --enableshadow --passalgo=sha512 --updateall
fi
このスクリプトは、Ubuntu 12.04 LTSで私のために機能しました: https://Gist.github.com/JensRantil/ac691a4854a4f6cb4bd9
#!/bin/bash
read -p "Enter username: " username
read -s -p "Enter password: " mypassword
echo
echo -n $username:$mypassword | chpasswd -S -c SHA512
他の代替手段のいくつかにはない以下の機能があります。
Perl/pythonで記述されたワンライナーの代替が必要な場合は、mkpasswdが適しています。 Debian whoisパッケージに含まれていますが、CentOS/RHELシステムにはありません。 Debianバージョンのmkpasswdを変更し、OpenSSLに基づくより強力なソルト生成メカニズムを含めました。結果のバイナリは、Debianのすべてのバージョンコマンドラインパラメータを完全に保持します。コードはgithubで入手可能であり、任意のLinuxフレーバーでコンパイルできます。 mkpasswd
それはワンライナーではありませんが、誰かを助けるかもしれません:
import crypt, getpass, pwd, string, sys, random
randomsalt = ""
password = getpass.getpass()
choices = string.ascii_uppercase + string.digits + string.ascii_lowercase
for _ in range(0,8):
randomsalt += random.choice(choices)
print crypt.crypt(password, '$6$%s$' % randomsalt)
HASHアルゴはMESSAGEダイジェストを作成するためのものであり、パスワードに適していないため、何らかのHKDFを使用する必要があります( http://tools.ietf.org/rfc/rfc5869.txt )-PBKDF2またはBCrypt
$ htpasswd -c /tmp/my_hash user1
New password:
Re-type new password:
Adding password for user user1
$ cat /tmp/my_hash
user1:$apr1$oj1ypcQz$4.6lFVtKz2nr8acsQ8hD30
明らかに、2番目のフィールドを取得するだけで、シャドウに追加したり、Sudoで使用するためにファイルを削除したりできます(まだシャドウである可能性が最も高い)。
#!/usr/bin/env python
import getpass
from passlib.hash import sha512_crypt
if __name__ == "__main__":
passwd = getpass.getpass('Password to hash: ')
hash = sha512_crypt.encrypt(passwd)
print hash
必要に応じて、私のgithubリポジトリからクローンを作成できます。 https://github.com/antoncohen/mksha
Crypt(3)のmanページを見てください。cryptツールがglibcとsha256($ 5)とsha512($ 6)、複数ラウンド、はるかに大きなソルトなどを使用するように更新されていることがわかります。 。
明らかに、SHA512は/ etc/shadowの動作に関連しています。
とは言っても、この問題は私の問題を解決したので、このWebページ、特にMKPASSWDは非常に役に立ちました。
「失われた」可能性のあるパスワードが与えられた場合、MKPASSWDとソルトを使用してSHA512ハッシュを生成し、候補パスワードのリストを確認/拒否できます。
私はリッパージョンを使用しますが、少なくとも私のハードウェア(Raspberry Pi)と予算(無)では-ジョンはそれを実行できません(ラズビアンの無料バージョンでは高度なcrypt/glibcをサポートしていないようです)。
ちなみに、私には/ etc/shadowの読み取り/書き込みの十分な権限があるので、ハッシュを上書きして、問題なく処理を進めることができます...これは学術的な練習です。
注意Glibcの注意この関数のglibc2バージョンは、追加の暗号化アルゴリズムをサポートしています。
If salt is a character string starting with the characters
"$id$" followed by a string terminated by "$":
$id$salt$encrypted
then instead of using the DES machine, id identifies the encryp‐
tion method used and this then determines how the rest of the
password string is interpreted. The following values of id are
supported:
ID | Method
─────────────────────────────────────────────────────────
1 | MD5
2a | Blowfish (not in mainline glibc; added in some
| Linux distributions)
5 | SHA-256 (since glibc 2.7)
6 | SHA-512 (since glibc 2.7)
So $5$salt$encrypted is an SHA-256 encoded password and
$6$salt$encrypted is an SHA-512 encoded one.