Algorithm Aix:如何在Aix/etc/security/passwd上生成有效的sha1/sha256/sha512密码哈希?

Algorithm Aix:如何在Aix/etc/security/passwd上生成有效的sha1/sha256/sha512密码哈希?,algorithm,hash,passwords,aix,crypt,Algorithm,Hash,Passwords,Aix,Crypt,AIX和其他Unix一样,只存储用户密码的附加散列。 在过去,它使用DES-crypt,然后是MD5-crypt(稍有不同的版本),与您在Linux上看到的相同 通过使用更新版本的AIX和/etc/security/passwd,您可以使用新的SHA1/SHA256/SHA512哈希。它们如下所示(密码“secret”的哈希字符串结果示例): 配置文件/etc/security/pwdalg.cfg解释了{algo_name}之后的数字是“num_代价”,我们可以得到哈希函数中使用的迭代次数,其

AIX和其他Unix一样,只存储用户密码的附加散列。 在过去,它使用DES-crypt,然后是MD5-crypt(稍有不同的版本),与您在Linux上看到的相同

通过使用更新版本的AIX和/etc/security/passwd,您可以使用新的SHA1/SHA256/SHA512哈希。它们如下所示(密码“secret”的哈希字符串结果示例):

配置文件/etc/security/pwdalg.cfg解释了{algo_name}之后的数字是“num_代价”,我们可以得到哈希函数中使用的迭代次数,其代价为2^num_

我需要从Scala应用程序生成有效的散列,后者位于/etc/security/passwd中

我试图调整commons编解码器Sha2Crypt(),它实现了官方的Sha-Crypt算法(),但这给出了错误的散列


有人知道应该怎么做吗

简单的回答是,appart for md5是标准的unix实现,它只在前缀({smd5}代替“$1”)上有所不同,其他实现与中描述的标准unix crypt有很大不同。事实上,它们只保留了:

  • 哈希的字节数(和字符数):对于ssha1为20,对于ssha256为32,对于ssh512为64
  • base64编码表(不是标准表,但以“/012”等开头)
改变的是:

  • 他们使用PBKDF2 HMAC-(sha1、sha256、SH512)代替Sha密码
  • 他们使用不同的填充表
  • Unix crypt词汇表中名为“轮数”的迭代次数不是哈希字符串开头的数字N(在algo名称之后)。迭代次数实际上是2^N,在/etc/security/pwdalg.cfg中称为“成本”

一个有效的Scala实现可以在Rudder的
AixPasswordHashAlgo.Scala
中找到:

简单的回答是,appart for md5是标准的unix实现,只是前缀({smd5}代替了“$1”)不同,其他实现与中描述的标准Unix crypt有很大不同。事实上,它们只保留了:

  • 哈希的字节数(和字符数):对于ssha1为20,对于ssha256为32,对于ssh512为64
  • base64编码表(不是标准表,但以“/012”等开头)
改变的是:

  • 他们使用PBKDF2 HMAC-(sha1、sha256、SH512)代替Sha密码
  • 他们使用不同的填充表
  • Unix crypt词汇表中名为“轮数”的迭代次数不是哈希字符串开头的数字N(在algo名称之后)。迭代次数实际上是2^N,在/etc/security/pwdalg.cfg中称为“成本”
可以在Rudder的
AixPasswordHashAlgo.Scala
中找到有效的Scala实现,如下所示:

- salted sha1   : {ssha1}12$tyiOfoE4WXucUfh/$1olYn48enIIKGOOs0ve/GE.k.sF
- salted ssha256: {ssha256}12$tyiOfoE4WXucUfh/$YDkcqbY5oKk4lwQ4pVKPy8o4MqcfVpp1ZxxvSfP0.wS
- salted ssha512: {ssha512}10$tyiOfoE4WXucUfh/$qaLbOhKx3fwIu93Hkh4Z89Vr.otLYEhRGN3b3SAZFD3mtxhqWZmY2iJKf0KB/5fuwlERv14pIN9h4XRAZtWH..