smd5-通过 unix 工具或 perl 生成

smd5-通过 unix 工具或 perl 生成

我在 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.cfglpa_options = std_hash=true并在该节中添加该行smd5:。正常的方法是使用chsec命令:

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

据我了解,这会使使用非标准算法记录的密码无效。

请注意,LDAP salted MD5 不是一个好的密码哈希,因为它并不慢。如何安全地散列密码?解释了这意味着什么。 BSD 和 AIX“MD5”算法很慢(理想情况下很慢,但比非慢算法要好得多)。

相关内容