web-dev-qa-db-ja.com

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

Linuxでは、sha1pass mypasswordを使用してSHA1パスワードハッシュを作成できます。 sha512ハッシュを作成できる同様のコマンドラインツールはありますか? BcryptPBKDF2についても同じ質問です。

90
student

はい、あなたは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::Bcrypt Perlモジュール。

59
derobert

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

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

回避策

これを回避するには、次の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」です。どちらの例でも$ 6 $を使用しています。これは、cryptでSHA-512を使用することを示しています。

75
slm

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

doveadm pw -s SHA512-CRYPT

結果の例:

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

{SHA512-CRYPT}をカットするだけで、SHA512ハッシュされた文字列が得られます。

16
obohovyk

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

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

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

12
ucemike

OpenSSLは

openssl passwd -6

ヘルプは言う:

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

一貫した出力を得るには、saltを指定できます。

openssl passwd -6 -salt <YOUR_SALT>

出力は次のようになります。

$6$YOUR_SALT$q/oDR4twC1ik4RoxTJJtX.3MjenHVapkMaBbq2NcRHGQjqhIWRNcEVitYZhyIx98D7lF7qs0vLTq17X0nEr8I.

あり:6アルゴリズムを示す「$」の間(上記の「-6」)、その後にYOUR_SALTおよび "$"、SHA512合計で終了。

3
Markus Linnala

上記の@slmの回避策をさらに詳しく説明すると、誰かがbash履歴を手に入れてプレーンテキストのパスワードを見るのが心配な場合は、pythonにraw_input()を挿入できます。 =ソルトとパスワードのフィールドが移動する場所のステートメント。入力を求めるプロンプトが表示されます。テキストは入力中にマスクされませんが、bashの履歴には表示されません。先頭のスペースでコマンドを開始することもできます。 、しかし私はいつもそうすることを忘れています。

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

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
MadMike

あなたがシムの答えから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())'
0
levi

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>
0
TMT

PBKDF2

OpenSSLはそのためのコマンドラインツールを提供していないため、PBKDF2ハッシュを生成できる単純なアプリケーションをGoで記述しました。 sha1、sha256、sha512、md5をサポートしています。

自分でビルドするか、「リリース」セクションでリリース済みのバイナリをダウンロードできます。

https://github.com/riotkit-org/gpbkdf2

使い方はとても簡単です:

gpbkdf2 --passphrase=my-secret-passphrase --salt=my-secret-salt --digest-algorithm=sha512 --digest-rounds=10000 --length=128