![smd5-通过 unix 工具或 perl 生成](https://linux22.com/image/5029/smd5-%E9%80%9A%E8%BF%87%20unix%20%E5%B7%A5%E5%85%B7%E6%88%96%20perl%20%E7%94%9F%E6%88%90.png)
我在 Unix 上遇到问题,必须在 smd5 中创建很多密码,但不知道如何使用某些 unix 工具或 perl 以以下形式生成 smd5 密码:{smd5}DoZgZ.OE$vSg4ZH7Bpy0BCdXNzBj001
我从来没有遇到过使用 openssl 等工具在 Linux 上以 md5/sha256/sha512 生成任何内容的问题
我尝试过使用 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 我没有看到盐那里就像这里{smd5}多ZgZ$vSg4ZH7Bpy0BCdXNzBj001 并且字符串更长
答案1
AIX 的{smd5}
格式是一种非标准格式。这是一个小变体*BSD/Linux/Solaris“MD5”(这是由 生成的openssl passwd -1
)。我无法找到有关它的太多信息。有代码贡献于开膛手约翰(存在于 1.8.0 jumbo 版本中)计算它,在文件中aix_smd5_fmt_plug.c
。从阅读代码来看,差异似乎在于 BSD MD5 变体有效地将字符串添加$1$
到盐的一个位置,而 AIX 变体则不然。如果您了解 C,那么修补 OpenSSL 以支持此变体应该不是很困难。
您可以通过编辑来更改 AIX 使用的算法/etc/security/pwdalg.cfg
lpa_options = std_hash=true
并在该节中添加该行smd5:
。正常的方法是使用chsec
命令:
chsec -f /etc/security/pwdalg.cfg -s md5 -a std_hash=true
据我了解,这会使使用非标准算法记录的密码无效。
请注意,LDAP salted MD5 不是一个好的密码哈希,因为它并不慢。如何安全地散列密码?解释了这意味着什么。 BSD 和 AIX“MD5”算法很慢(理想情况下很慢,但比非慢算法要好得多)。