こんばんはヌキヲです。
今回は OpenLDAP のパスワードなどで使われる SSHA 方式のダイジェストを
Windows 上のコマンドプロンプトのみで生成するお話です。
背景から言うと PukiWiki でユーザアカウントを切ってもらうのに
パスワードのダイジェストもくれと言われたので、なんだそりゃ?となって調べました。
BugTrack/709 パスワードのフォーマットを選択可能に(LDAP互換に)
かみ砕いていうと SHA1 に SALT を付けた 24byte を base64 でエンコードすればいいらしいですね。
Windows 環境で手軽に生成できないものか調べたところ、
OpenSSL コマンドが Windows10 にも入っており、
また CertUtil が Base64 のエンコードに対応していましたので、バッチファイルにしてみました。
です。
これを 適当な名前.cmd でフォルダに入れて、引数にパスワードを入れれば、
画面と result.txt に結果が出ます。
テンポラリファイルとか使うので結構危なげ?(笑
以下のサイト様を参考にしました。
素敵な情報ありがとうございます!
notepad.wiki > SSHA (Salted SHA-1) 形式のパスワードを生成したい
Eiji James Yoshidaの記録 > [メモ] Windowsでbase64エンコード・デコードする方法
□2017.02.05 追記。
上のままでは、SALT を毎回ランダムで生成してしまうので、
salt.bin ファイルが残っていれば、それを使うようにバージョンアップします。
はい、実際は 3行 増えて、ファイル名を変えただけです。
これで同じ SALT で何度も生成を試せます。
また、Base64 のデコードの方も作りました。
デコードされた decode.bin の先頭 20byte を削除すれば SALT が復元できますね。
で、これらを使って無事にログインできたか?
というのが一番重要だと思うのですが、実は失敗しています(笑
うーん、どっか間違ってるのかなぁ?
□2017.02.08 追記。
朗報!問題点がわかりました!!
Windows cmd.exe の echo は空白と改行を足してしまうのです。
何ともマニアックなコマンドですね!
あと変更点は openssl の使い方をちょっと調べたところです。
断然すっきりしました。
さて、メデタシメデタシで終わろうと思ったのですが、
実はもっと簡単な生成方法があったのでお知らせします。
自身の Pukiwiki の TOP から index.php?cmd=md5 というページにアクセスすると、
なんとダイジェスト生成ページが現れます。
ディフォルトで SLAT 長は 8byte になるみたいですね。
なんて簡単なんだ!
参考は以下のサイト様です。
[Tips] Pukiwikiでパスワード設定
Qiita > 【バッチファイル】文字列を改行なしで表示【備忘録】
今回は OpenLDAP のパスワードなどで使われる SSHA 方式のダイジェストを
Windows 上のコマンドプロンプトのみで生成するお話です。
背景から言うと PukiWiki でユーザアカウントを切ってもらうのに
パスワードのダイジェストもくれと言われたので、なんだそりゃ?となって調べました。
BugTrack/709 パスワードのフォーマットを選択可能に(LDAP互換に)
かみ砕いていうと SHA1 に SALT を付けた 24byte を base64 でエンコードすればいいらしいですね。
Windows 環境で手軽に生成できないものか調べたところ、
OpenSSL コマンドが Windows10 にも入っており、
また CertUtil が Base64 のエンコードに対応していましたので、バッチファイルにしてみました。
@echo off IF %1 == "" GOTO END openssl rand 4 > salt.temp echo %1 > temp.$1 cat salt.temp >> temp.$1 cat temp.$1 | openssl dgst -sha1 -binary > temp.$2 cat salt.temp >> temp.$2 certutil -f -encode temp.$2 result.txt cat result.txt del -f salt.temp temp.$1 temp.$2 :END
です。
これを 適当な名前.cmd でフォルダに入れて、引数にパスワードを入れれば、
画面と result.txt に結果が出ます。
テンポラリファイルとか使うので結構危なげ?(笑
以下のサイト様を参考にしました。
素敵な情報ありがとうございます!
notepad.wiki > SSHA (Salted SHA-1) 形式のパスワードを生成したい
Eiji James Yoshidaの記録 > [メモ] Windowsでbase64エンコード・デコードする方法
□2017.02.05 追記。
上のままでは、SALT を毎回ランダムで生成してしまうので、
salt.bin ファイルが残っていれば、それを使うようにバージョンアップします。
@echo off IF %1 == "" GOTO END IF EXIST salt.bin GOTO DGST openssl rand 4 > salt.bin :DGST echo %1 > temp.$1 cat salt.bin >> temp.$1 cat temp.$1 | openssl dgst -sha1 -binary > temp.$2 cat salt.bin >> temp.$2 certutil -f -encode temp.$2 result.txt cat result.txt del -f temp.$1 temp.$2 :END
はい、実際は 3行 増えて、ファイル名を変えただけです。
これで同じ SALT で何度も生成を試せます。
また、Base64 のデコードの方も作りました。
@echo off IF %1 == "" GOTO END echo %1 > temp.txt certutil -f -decode temp.txt decode.bin del temp.txt :END
デコードされた decode.bin の先頭 20byte を削除すれば SALT が復元できますね。
で、これらを使って無事にログインできたか?
というのが一番重要だと思うのですが、実は失敗しています(笑
うーん、どっか間違ってるのかなぁ?
□2017.02.08 追記。
朗報!問題点がわかりました!!
Windows cmd.exe の echo は空白と改行を足してしまうのです。
@echo off IF %1 == "" GOTO END IF EXIST salt.bin GOTO DGST openssl rand 4 > salt.bin :DGST SET /P XXX=%1<NUL > temp.$1 cat salt.bin >> temp.$1 openssl dgst -sha1 -binary -out temp.$2 temp.$1 cat salt.bin >> temp.$2 certutil -f -encode temp.$2 result.txt cat result.txt del -f temp.$1 temp.$2 :END
何ともマニアックなコマンドですね!
あと変更点は openssl の使い方をちょっと調べたところです。
断然すっきりしました。
さて、メデタシメデタシで終わろうと思ったのですが、
実はもっと簡単な生成方法があったのでお知らせします。
自身の Pukiwiki の TOP から index.php?cmd=md5 というページにアクセスすると、
なんとダイジェスト生成ページが現れます。
ディフォルトで SLAT 長は 8byte になるみたいですね。
なんて簡単なんだ!
参考は以下のサイト様です。
[Tips] Pukiwikiでパスワード設定
Qiita > 【バッチファイル】文字列を改行なしで表示【備忘録】
※コメント投稿者のブログIDはブログ作成者のみに通知されます