perl – 为什么每次运行程序时,从常量列表创建的哈希“以不同的
发布时间:2020-12-15 23:34:59 所属栏目:大数据 来源:网络整理
导读:下面是Perl中的小脚本.每次运行此代码时,我都会得到不同的输出. 任何人都可以帮助我理解哈希变量的存储基础知识,即如何为Perl的哈希变量的键值对进行索引. #!/usr/bin/perl%data = ('John Paul' = 45,'Lisa' = 30,'Kumar' = 40);@names = keys %data;print "
下面是Perl中的小脚本.每次运行此代码时,我都会得到不同的输出.
任何人都可以帮助我理解哈希变量的存储基础知识,即如何为Perl的哈希变量的键值对进行索引. #!/usr/bin/perl %data = ('John Paul' => 45,'Lisa' => 30,'Kumar' => 40); @names = keys %data; print "$names[0]n"; print "$names[1]n"; print "$names[2]n"; 解决方法
该行为记录在
perlsec的
Algorithmic Complexity Attacks中.
哈希是链表的数组.散列函数将密钥转换为一个数字,该数字用作存储值的数组元素(“bucket”)的索引.多个密钥可以散列到相同的索引(“冲突”),这是由链表处理的情况. 如果恶意用户知道散列算法,他可以设计散列到同一索引的值,从而导致散列退化为链接列表.这可能会导致某些应用程序性能大幅下降,因此可用作拒绝服务(DoS)攻击的一部分. 采取了两项措施来避免这种情况.一种方法是使散列算法加盐以随机化存储元素的顺序,另一种方法是通过扰乱迭代器访问散列元素的顺序来更难检测盐. $perl -E' my @k = "a".."z"; for (1..3) { my %h = map { $_ => 1 } @k; say keys %h; } ' iocmbygdkranwxfejuqpzvltsh bmcoigdywrankujfxezpqlvths juexfwarnkgdybmcoihstlvzpq (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |