コマンドラインでSHA512パスワードハッシュを作成する方法


83

Linuxでは、を使用してSHA1パスワードハッシュを作成できますsha1pass mypasswordsha512ハッシュを作成できる同様のコマンドラインツールはありますか?Bcryptとに対する同じ質問PBKDF2


じゃないsha1sum

1
@Tichodromaいいえ、実際にはsha1passコマンドがあり、Debianのsyslinux-commonパッケージの一部です。
-derobert

2
sha512sumcoreutilsの一部であるコマンドがあり、同様のコマンドがありますopenssl sha512が、追加のコマンドはありsha1passません。
キーストンプソン

回答:


55

はい、探していますmkpasswd(これは少なくともDebianでは)whoisパッケージの一部です。理由を聞かないでください...

anthony@Zia:~$ mkpasswd -m help
Available methods:
des     standard 56 bit DES-based crypt(3)
md5     MD5
sha-256 SHA-256
sha-512 SHA-512

残念ながら、私のバージョンは少なくともbcryptを行いません。Cライブラリがサポートしている場合は、その必要があります(そして、マンページに強度を設定する-Rオプションがあります)。-Rはsha-512でも動作しますが、PBKDF-2かどうかはわかりません。

bcryptパスワードを生成する必要がある場合は、Crypt::Eksblowfish::BcryptPerlモジュールを使用してかなり簡単に実行できます。


70

Fedora、CentOS、RHELなどのRed Hatディストリビューションでmkpasswdは、Debian / Ubuntuに通常含まれているバージョンと同じスイッチセットがコマンドに含まれていません。

注:コマンドmkpasswdは実際にはexpectパッケージの一部であり、おそらく避けるべきです。これらのコマンドのいずれかを使用して、どのパッケージに属しているかを確認できます。

$ yum whatprovides "*/mkpasswd"
-or-
$ repoquery -q --file */mkpasswd

$ repoquery -q --file */mkpasswd
expect-0:5.43.0-8.el5.x86_64
expect-0:5.43.0-8.el5.i386

これらの方法は両方とも、rpm見つけるためにパッケージをインストールする必要がないため、使用するよりも優れています*/mkpasswd

回避策

これを回避するには、次のPythonまたはPerlワンライナーを使用してSHA-512パスワードを生成できます。これらは塩漬けされていることに注意してください:

Python(> = 3.3)

$ python -c 'import crypt,getpass; print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA512)))'

-またはスクリプト化-

$ python -c 'import crypt; print(crypt.crypt("somesecret", crypt.mksalt(crypt.METHOD_SHA512)))'

Python(2.xまたは3.x)

$ python -c "import crypt, getpass, pwd; \
             print(crypt.crypt('password', '\$6\$saltsalt\$'))"

$6$saltsalt$qFmFH.bQmmtXzyBY0s9v7Oicd2z4XSIecDzlB5KiA2/jctKu9YterLp8wwnSq.qc.eoxqOmSuNp2xS0ktL3nh/

注:$ 6 $はsha512を示します。このアルゴリズム指定方法のサポートは、OSレベルのcrypt(3)ライブラリ関数(通常はlibcrypt)のサポートに依存しています。Pythonバージョンに依存しません。

Perl

$ perl -e 'print crypt("password","\$6\$saltsalt\$") . "\n"'
$6$saltsalt$qFmFH.bQmmtXzyBY0s9v7Oicd2z4XSIecDzlB5KiA2/jctKu9YterLp8wwnSq.qc.eoxqOmSuNp2xS0ktL3nh/

これらの例では、パスワードはストリング「password」であり、ソルトは「saltsalt」です。どちらの例も、cryptでSHA-512を使用することを示す$ 6 $を使用しています。


2
Pythonのワンライナーではcrypt.mksalt(crypt.METHOD_SHA512)、固定のものを使用する代わりにを使用してソルトを生成できます。
ジェイクコブ14

2
@JakeCobb crypt.mksaltはPython 3.xでのみ利用可能です
リッカルドムリ14

2
コマンドラインでクリアテキストパスワードを入力する前に、HISTCONTROLで「ignorespace」が設定されていることを確認します(つまり、CentOS / RHELで最初にこれを実行します。echo 'export HISTCONTROL = "ignoredups:ignorespace"'> /etc/profile.d /histcontrol.sh && source /etc/profile.d/histcontrol.sh)。それ以外の場合は、〜/ .bash_historyに保存されます。
パトリック14

3
perl(およびおそらくpython)はシステム関数「crypt」を使用します。そのため、それらは移植性がなく、要求されたハッシュタイプを理解する暗号化関数が必要です。OSX cryptはそうではありません-古いスタイルのDES暗号化文字列を返すだけです。
ダンプリッツ

1
@RiccardoMurri私はPython 2.7.5を持ちcrypt.mksalt、CentOS 7.1
user12345で

15

パッケージにdoveadm含まれているユーティリティを使用できdovecotます。

doveadm pw -s SHA512-CRYPT

結果の例:

{SHA512-CRYPT}$6$0JvQ1LLFESzA16.I$JVdKAIq0igudTq06BMqzT9rL1gRawMPwLr9U3/kBMKUqZdONfa0wubC89C35LKl3aE16CRH57BfGb4ygPLggL1

{SHA512-CRYPT}をカットするだけで、SHA512ハッシュ文字列を取得できます。


通常のユーザーとしては機能しません:doveadm(jotik): Fatal: Error reading configuration: stat(/etc/dovecot/dovecot.conf) failed: Permission denied (euid=1000(jotik) egid=100(users) missing +x perm: /etc/dovecot, we're not in group 97(dovecot), dir owned by 0:97 mode=0750)
jotik

12

次のコマンドを実行します:

$ /sbin/grub-crypt --sha-512

次に、ハッシュする単語を入力します。


-bash:/ sbin / grub-crypt:そのようなファイルやディレクトリはありません
シェパードは

grubがc7にあるとは思わないので、次を使用できます。python -c 'import crypt、getpass; print(crypt.crypt(getpass.getpass()、crypt.mksalt(crypt.METHOD_SHA512))) ''
ucemike

3

上記の@slmの回避策を展開するには、誰かがあなたのbash履歴を手に入れてプレーンテキストのパスワードを見るのが心配な場合raw_input()は、saltフィールドとpasswordフィールドが行くようにpythonステートメントに挿入して、プロンプトを表示することができます。入力中はテキストはマスクされませんが、bash履歴には表示されません。また、先頭にスペースを入れてコマンドを開始することもできますが、それを忘れてしまいます。

python -c "import crypt, getpass, pwd; print crypt.crypt(raw_input(), '\$6\$' + raw_input() + '\$')"

2
また、ファイルにbashスペースを追加HISTCONTROL=ignorespaceするコマンドを記録しないように設定することもでき.bashrcます。履歴から除外するコマンドを実行するときは、スペースを入力してから実際のコマンドを入力します。
theillien

1

sha512 htpasswd

ユーザーとパスワードを要求し、通常のhtpasswdファイルを生成するコマンド:

python -c 'import crypt,getpass; print(getpass.getpass("Name: ")+":"+crypt.crypt(getpass.getpass(),crypt.mksalt(crypt.METHOD_SHA512)))' >> htpasswd

すべてのpythonバージョン> 2.5で動作します。


1

OpenSSLには

openssl passwd -6

ヘルプは言う:

$ openssl passwd --help
Usage: passwd [options]
Valid options are:
...
 -6                  SHA512-based password algorithm

0

simの回答からPython(> = 2.7)メソッドを使用しており、パスワードを生成する前に確認したい場合-太い指のパスワードがあるため...

$ python -c 'import crypt,getpass;pw=getpass.getpass(); print(crypt.crypt(pw), crypt.mksalt(crypt.METHOD_SHA512) if (pw==getpass.getpass("Confirm: ")) else exit())'

この回答の2017年11月29日版では、これはPython 2.7(またはそれ以降)で機能すると述べています。python2.7のcryptモジュールにはmksalt()がありません。また、crypt.crypt()の2番目の引数としてcrypt.mksalt()呼び出しが必要だと思います(間違った閉じ括弧?)。
フアン

0

Linuxのopensslバージョン「OpenSSL 1.1.1」およびMacOSのopensslバージョン「LibreSSL 2.6.5」はmd5_cryptをサポートしています。

実行してパスワードを入力するだけです:

openssl passwd -crypt
Password:
Verifying - Password:
<results_into_a_md5_crypt_password>

または、プレーンテキストパスワードを直接CLIに提供します。

openssl password -crypt <plain_text_password_goes_here>
<results_into_a_md5_crypt_password>

-12

以下を使用できますsha512sum

echo "password" | sha512sum

24
この答えは間違っています。このコマンドは、有効なSHA-512 パスワードハッシュを生成しません。文字列password \ nのチェックサムを単純に計算します(最後に改行もあることに注意してください)。Unixパスワードハッシュはソルトされ、2つの「$」記号の間にハッシュバージョンコードが含まれます。@slmによる回答を参照してください。
ゾレム

具体的には、パスワードが多少難読化されている一方で、この方法はen.wikipedia.org/wiki/Rainbow_table攻撃に対して脆弱であるという問題があります。
DepressedDaniel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.