web-dev-qa-db-ja.com

smd5-unixツールまたはperlで生成

Unixで問題があり、smd5で多くのパスワードを作成する必要がありますが、UNIXツールまたはPerlを使用してsmd5パスワードを次の形式で生成する方法がわかりません:{smd5} DoZgZ.OE $ vSg4ZH7Bpy0BCdXNzBj001

Linuxでmd5/sha256/sha512のようなツールを使用して何かを生成するのに問題があったことは一度もありません。 openssl

私はそのようなものを使ってPerlで試しました:

use Digest::MD5;
use MIME::Base64;
$ctx = Digest::MD5->new;
$ctx->add('vwkfA17aF`');
$salt = 'DoZgZ.OE';
$ctx->add($salt);
$hashedPasswd = '{smd5}' . encode_base64($ctx->digest . $salt ,'');
print $hashedPasswd . "\n";

しかし、残念ながら出力はまったく異なります:{smd5} 5zJphaZULO3gnT1pwT1YHERvWmdaLk9F表示されませんsaltここのように{smd5} DoZgZ.OE $ vSg4ZH7Bpy0BCdXNzBj001そして文字列が長くなります

2
ast

AIXの{smd5}形式は非標準の形式です。これは * BSD/Linux/Solaris“ MD5”openssl passwd -1によって生成されたもの)のマイナーバリアントです。私はそれについて多くの情報を見つけることができませんでした。ファイル aix_smd5_fmt_plug.c には、それを計算する John the Ripper (1.8.0ジャンボバージョンに存在)に提供されたコードがあります。コードを読むと、違いは、BSD MD5バリアントが文字列$1$を1つの場所でソルトに効果的に付加するのに対し、AIXバリアントはそうではないことです。 Cを知っている場合は、このバリアントをサポートするためにOpenSSLにパッチを適用することはそれほど難しくありません。

/etc/security/pwdalg.cfg を編集し、lpa_options = std_hash=trueスタンザに行smd5:を追加することにより、AIXで使用されるアルゴリズムを変更できます。これを行う通常の方法は、 chsecコマンド を使用することです。

chsec -f /etc/security/pwdalg.cfg -s md5 -a std_hash=true

私の知る限り、これは非標準のアルゴリズムで記録されたパスワードを無効にします。

LDAPソルトMD5は低速ではないため、適切なパスワードハッシュではないことに注意してください。 パスワードを安全にハッシュする方法は? それが何を意味するかを説明します。 BSDおよびAIXの「MD5」アルゴリズムは低速です(理想的には低速ですが、低速でないアルゴリズムよりもはるかに優れています)。