gpt4 book ai didi

perl - 使用 Perls unpack() 验证加盐哈希

转载 作者:行者123 更新时间:2023-12-01 09:56:35 27 4
gpt4 key购买 nike

我正在尝试使用 Perl 验证加盐密码,但无法解压。

我有一个加盐哈希密码,例如对于 SHA256:SSHA256 = SHA256('密码' + '盐') + '盐'Base64 编码得到 '{SSHA256}eje4XIkY6sGakInA+loqtNzj+QUo3N7sEIsj3fNge5lzYWx0'。

我将这个字符串存储在我的用户数据库中。当用户登录时需要将盐与散列分开,以将提供的密码与盐进行散列,并将结果与​​从数据库中检索到的结果进行比较。这就是我被困的地方。我似乎没有正确的解压模板将散列(8 位二进制,固定长度,在本例中为 32 字节)与盐(8 位二进制,可变长度)分开。

我试过类似的东西
my ($hash, $salt) = unpack('N32 N*', $data);
但这似乎行不通。

我的问题是:我如何解压这个散列(在它被 Base64 解码之后)以在一个变量中获得固定长度的散列和在另一个变量中获得可变长度的盐?

最佳答案

我认为您不必要地重新发明轮子。

您可以使用例如Crypt::SaltedHash轻松验证它,例如:

my $password_entered = $cgi->param('password');my $valid = Crypt::SaltedHash->validate($salted, $password_entered);

一个更长的例子,也展示了在第一个实例中使用 Crypt::SaltedHash 生成加盐密码:

my $csh = Crypt::SaltedHash->new(algorithm => 'SHA-256');$csh->add('secretpassword');my $salted =  $csh->generate;# $salted will contain the salted hash (Crypt::SaltedHash picks random# salt for you automatically)# for example:  DB x $salted = $csh->generate;0  '{SSHA256}H1WaxHcyAB81iyIPwib/cCUtjqCm2sxQNA1QvGeh/iT3m51w'# validating that against the plaintext 'secretpassword' shows it's right:  DB x Crypt::SaltedHash->validate($salted, 'secretpassword');0  1# and trying it with an incorrect password:  DB x Crypt::SaltedHash->validate($salted, 'wrongpassword');0  ''

没有理由自己重新发明所有这些。

关于perl - 使用 Perls unpack() 验证加盐哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4477993/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com