Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Perl中创建glibc 2.7风格的Sha-512加密哈希_Perl_Cryptography_Passwords_Salt_Password Encryption - Fatal编程技术网

在Perl中创建glibc 2.7风格的Sha-512加密哈希

在Perl中创建glibc 2.7风格的Sha-512加密哈希,perl,cryptography,passwords,salt,password-encryption,Perl,Cryptography,Passwords,Salt,Password Encryption,所以,我有一个网站,可以从数据库中读取/验证(和写入)密码散列,我有一些东西可以制作SHA-512样式的密码散列,看起来像: $6$GloHensinmyampOc$AxvlkxxXk36oDOyu8phBzbCfLn8hyWgoYNEuqNS.3dHf4JJrwlYCqha/g6pA7HJ1WwsADjWU4Qz8MfSWM2w6F. 这个网站是基于java的,所以我为它写了一个SHA-512哈希程序。问题是,有一堆perl cron作业运行时,也需要偶尔验证数据库中的密码哈希,而且由于这些

所以,我有一个网站,可以从数据库中读取/验证(和写入)密码散列,我有一些东西可以制作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密码哈希


谢谢!

不幸的是,没有。
crypt
将是您的系统libc
crypt
,它负责选择算法并将前缀字符串映射到算法。如果您想访问不在系统
crypt
中的算法,那么您需要重新实现它们,如果是libc,请打开是的,我不知道有什么重新实施的。glibc的“SHA-512”密码散列不是简单的SHA-512;它是一种我所知道的glibc之外不存在的自定义算法。如果您还有机会,您可能希望更改为类似bcrypt或PBKDF-SHA-2的算法,该算法有多种不同语言的实现。

事实上,我想我刚刚找到了自己的答案:

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

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

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的实现不是一个简单的盐n散列操作,在面对攻击时,这确实是非常无用的,因为它非常容易(快速)它是用于计算机计算SHA哈希的。请参阅设计它的开发人员在2007年写的这篇文章:……从bnsh链接页面的快速说服力来看,我猜这个perl模块基于相同的设计,这将使@cnd的参数毫无根据。与其说它是一个自定义算法,不如说它是一个不同的算法。它是sha512crypt.SHA512的设计速度非常快,这与密码哈希函数的要求相反。它与bcrypt一起遵循crypt(3)标准,并支持可变的复杂性(可变的“轮数”使其在未来默认5000轮不够时更强大)。crypt(3)密码哈希始终是您应该使用的。没有其他,永远。