当前位置: 首页 > 知识库问答 >
问题:

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

慕志泽
2023-03-14

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

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

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

配置文件 /etc/security/pwdalg.cfg解释{algo_name}后面的数字是“num_cost”,我们可以用2^num_cost得到散列函数中使用的迭代次数。

我需要从位于/etc/security/passwd中的Scala应用程序生成有效哈希。

我尝试改编commons编解码器Sha2Crypt(https://commons.apache.org/proper/commons-codec/apidocs/src-html/org/apache/commons/codec/digest/Sha2Crypt.html)witch实现官方的Sha加密算法(https://www.akkadia.org/drepper/SHA-crypt.txt),但这给出了错误的哈希。

有人知道应该怎么做吗?

共有1个答案

鱼渝
2023-03-14

简短的回答是,对于md5,它是标准的unix实现,仅与前缀({smd5}代替“1美元”不同,其他实现与https://www.akkadia.org/drepper/SHA-crypt.txt.中描述的标准Unix crypt有很大不同事实上,它们只保留了:

  • 哈希的字节数(以及字符数):ssha1为20,ssha256为32,ssh512为64
  • base 64编码表(不是标准的,但以“./012”等开头

改变的是:

  • 他们使用PBKDF2 HMAC-(sha1、sha256、SH512)代替Sha密码,

有效的Scala实现可以在Rudder的AixPasswordHashAlgo中找到。scala此处:https://github.com/Normation/rudder/blob/master/webapp/sources/rudder/rudder-core/src/main/scala/com/normation/cfclerk/domain/AixPasswordHashAlgo.scala

 类似资料:
  • 我正在写一个Django应用程序,需要与现有的Java播放框架应用程序一起工作。Play应用程序使用PasswordHash.java来存储密码。它以冒号分隔的格式存储密码。每个哈希都存储为::。 例如,下面是密码“测试”的条目: 在这里,我们可以通过拆分字符串并找到: 迭代次数: 盐: PBKDF2哈希:。 我修改了Django的check_密码机制以与此格式兼容,但发现它认为密码不正确。我用了

  • 我想获取一个SHA256散列,并使用Bouncy Castle(实际上是海绵城堡)生成一个密钥。在下面的代码摘录中,retval是SHA256Digest(字节数组)返回的值,finalKey应该是从SHA256哈希生成的键。 当我尝试运行代码时,我得到的消息是“Encoded key spec not recognized”,因此我认为retval应该采用某种特定的格式,并且我不能像现在这样直接

  • 问题内容: 我正在使用GoLang中的授权模块。在我们将PHP5与crypt函数一起使用之前。哈希生成类似于SHA-512: 并像这样存储在数据库中。但是现在我需要使其在GoLang中也能正常工作。我在Google上进行了搜索,并尝试了不同的方法,例如: 但是所有产生的东西都不一样。谁能进一步帮助我们? 我们要验证并创建类似php版本的哈希。 提前致谢。 问题答案: https://github.

  • 主要内容:用户名,密码,UID,GID,描述性信息,主目录,默认的ShellLinux 系统中的 /etc/passwd 文件,是系统用户配置文件,存储了系统中所有用户的基本信息,并且所有用户都可以对此文件执行读操作。 首先我们来打开这个文件,看看到底包含哪些内容,执行命令如下: [root@localhost ~]# vi /etc/passwd #查看一下文件内容 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/

  • 我已经创建了一个docker映像,允许用户使用SSH在上面连接。 出于安全原因,我希望用户可以更改他们的密码。我只使用docker命名的卷,所以我不能绑定 /etc/passwd,我不想挂载所有 /etc 有什么想法吗?提前感谢。

  • 在这里找到了一些示例代码,但这只适用于SHA1。代码的关键位是: 我需要把这个从SHA1改成SHA256。 从Java文档和这篇文章来看,下面的内容似乎是可能的,但是C#库中的构造函数没有重载。