微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

perl:使用 Digest::SHA3,使用来自在线的基本示例,输出的位值将其设为 160,这表示是弱散列长度?

如何解决perl:使用 Digest::SHA3,使用来自在线的基本示例,输出的位值将其设为 160,这表示是弱散列长度?

我正在使用以下代码来学习/熟悉单向密码加密、加盐,并使用它们在登录时验证用户

它有效,我将散列密码和盐值存储在我的数据库中,我可以检索两者并与纯文本密码进行比较,没问题。

我的问题是关于输出、它的安全性等。

use Digest::SHA3;

$plaintextpassword='cheeseburgerandfries';

$salts = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMnopQRSTUVWXYZ123456789";

$s1a = rand(62);
$s1b = rand(62);
$s1c = rand(62);
$salt = substr($salts,$s1a,1).substr($salts,$s1b,$s1c,1);

$sha1 = Digest::SHA3->new;
$sha1->add($salt.$plaintextpassword);
$encpw = $sha1->hexdigest;

给出类似于

输出
$encpw='7fd7d6e9b574fe6306be6c709d23050b5ad28f07e094403469229b6d'

当我获取该值并通过文本到字节转换器(在线)运行它时,我得到

00110111 01100110 01100100 00110111 01100100 00110110 01100101 00111001 01100010 00110101
00110111 00110100 01100110 01100101 00110110 00110011 00110000 00110110 01100010 01100101
00110110 01100011 00110111 00110000 00111001 01100100 00110010 00110011 00110000 00110101
00110000 01100010 00110101 01100001 01100100 00110010 00111000 01100110 00110000 00110111
01100101 00110000 00111001 00110100 00110100 00110000 00110011 00110100 00110110 00111001
00110010 00110010 00111001 01100010 00110110 01100100

我认为是 160 位。因为我对哈希和位真的很陌生,所以我很困惑。

我的想法是 SHA3 是 256 位及以上,那么为什么输出是 160 位。我什至可能误解了数据,甚至我从研究中收集的信息,所以请原谅我。

此外,我确信有更简单/更好/更强/无论怎样的方法来实现我的目标,但我认为我的问题更像是理解位长等。

另外,我读到最好使用等于输出字符长度的盐值长度,这意味着我的盐值将是 56 个字符,就像我上面的 SHA3 输出一样?我正在考虑使用一些基本的东西,例如


$salts = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMnopQRSTUVWXYZ123456789";

$sv=0;

while ($sv<56) {

$s1 = rand(62);

$newsalt = $newsalt.substr($salts,$s1,1);

$sv++;
}

$salt = $newsalt;

我确实读过一些模块,它们会给我真正的随机盐值,我对这些很感兴趣,但是我的 while 循环似乎正在执行任务,但是没有必要使用 56 个字符的盐值。

任何帮助和指导都会很好。谢谢!

  • 喷出

解决方法

您提供的哈希大小为 224 位(不是 160)。

模块的摘要说

该模块为 Perl 程序员提供了一种方便的方法来计算 SHA3-224、SHA3-256、SHA3-384 和 SHA3-512 消息摘要,以及使用 SHAKE128 和 SHAKE256 的可变长度哈希。

维基百科 confirms 这些(224、256、384 和 512)是标准尺寸。

如果您想获得特定尺寸,请使用

use Digest::SHA3 qw( );

my $sha3 = Digest::SHA3->new(XXX)
$sha3->add(...);
my $hash = $sha3->hexdigest;

use Digest::SHA3 qw( sha3_XXX_hex );

my $hash = sha3_XXX_hex(...);

使用适当数量的位代替 XXX

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。