【问题标题】:Creating glibc 2.7 style Sha-512 crypt hashes in Perl在 Perl 中创建 glibc 2.7 样式的 Sha-512 加密哈希
【发布时间】:2012-06-16 13:19:51
【问题描述】:

所以,我有一个网站,可以从数据库中读取/验证(和写入)密码哈希,并且我有一些东西可以为此制作 SHA-512 风格的密码哈希,看起来像:

$6$GloHensinmyampOc$AxvlkxxXk36oDOyu8phBzbCfLn8hyWgoYNEuqNS.3dHf4JJrwlYCqha/g6pA7HJ1WwsADjWU4Qz8MfSWM2w6F.

该网站是基于 java 的,所以我为它编写了一个 SHA-512 哈希器。麻烦的是,有一堆运行的 perl cron 作业需要偶尔验证数据库的密码散列,并且由于它们在 Solaris 机器上运行,它的 crypt 不支持 $6$格式。

所以,当我这样做时:

printf("crypt => '%s'\n",crypt("Hello",'$1$CygnieHyitJoconf$'));

我明智地回来了:

crypt => '$1$CygnieHy$n9MlDleP0qmGCfpbnVYy11'

如果我这样做了

printf("crypt => '%s'\n",crypt("Hello",'$6$CygnieHyitJoconf$'));

我觉得没用

crypt => ''

有没有办法在不使用 glibc 的机器上获取 Perl 中的 SHA-512 密码哈希? (这就是我在主要进行搜索时被告知的内容(“使用 crypt”)。

我真的不想在 perl 中重新实现 SHA-512 密码哈希。

谢谢!

【问题讨论】:

    标签: perl cryptography passwords salt password-encryption


    【解决方案1】:

    其实我想我刚刚找到了自己的答案:Crypt::Passwd::XS

    Crypt::Passwd::XS - 通用 crypt() 算法的完整 XS 实现

    它支持 unix_md5、apache_md5、unix_des、unix_sha256 和 unix_sha512.. 我想它不支持河豚有点不幸。但是,尽管如此,它解决了我的问题!无论如何感谢@hobbs!

    use strict;
    use Crypt::Passwd::XS;
    
    {
            printf("crypt => %s\n",Crypt::Passwd::XS::crypt("Hello",'$6$CygnieHyitJoconf$'));
    }
    

    现在返回

    crypt => $6$CygnieHyitJoconf$vkGJm.nLrFhyWHhNTvOh9fH/k7y6k.8ed.N7TqwT93hPMPfAOUsrRiO3MmQB5xTm1XDCVlW2zwyzU48epp8pY/
    

    正如预期的那样!

    【讨论】:

    • 哦,有趣的讽刺。一个名为“Crypt::Passwd::XS”的模块,它只包含你永远不应该用于密码的算法!!! bcrypt 或 PBKDF* 伙计们,如果你不明白为什么,你最好去阅读。这很微妙,但只是“无用”和“有效”之间的区别!
    • 真的吗?为什么不应该使用 unix_sha512?它有盐分,据我所知,它仍然具有抗碰撞性.. ?
    • 为了记录,glibc 的实现不是一个简单的 salt 'n hash 操作,考虑到计算机计算 SHA 哈希是多么容易(快速),这在面对攻击时确实毫无用处.请参阅设计它的开发人员在 2007 年撰写的这篇文章:akkadia.org/drepper/sha-crypt.html ... 从快速浏览 bnsh 链接的页面,我猜这个 perl 模块是基于相同的设计,这会使 @cnd 的论点毫无根据.
    【解决方案2】:

    很遗憾没有。 crypt 将是您的系统 libc crypt,它负责选择算法并将前缀字符串映射到算法。如果您想访问系统中不存在的算法crypt,那么您需要使用它们的重新实现,对于 libc 的情况,我不知道有任何重新实现。 glibc 的“SHA-512”密码哈希不仅仅是 SHA-512;这是我所知道的 glibc 之外不存在的自定义算法。如果您仍有机会,您可能希望更改为 bcrypt 或 PBKDF-SHA-2 之类的算法,该算法在不同语言中具有多种实现。

    【讨论】:

    • 与其说是自定义算法,不如说是不同的算法。它是 sha512crypt。 SHA512 设计为 FAST,这与您想要的密码散列函数相反。它与 bcrypt 一起遵循 crypt(3) 标准,并支持可变复杂度(可变数量的“轮”,以便将来在默认的 5000 轮不够用时使其更强大)。 crypt(3) 始终是您应该用于密码散列的方法。没有别的了。
    猜你喜欢
    • 1970-01-01
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    相关资源
    最近更新 更多