首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Perl5.18中更改默认的ONE_AT_A_TIME_HARD哈希函数?

如何在Perl5.18中更改默认的ONE_AT_A_TIME_HARD哈希函数?
EN

Stack Overflow用户
提问于 2015-08-14 08:51:28
回答 1查看 109关注 0票数 1

我对Perl并不十分熟悉,但在过去的两天里,我一直在文档和其他来源中搜索,但没有成功。文件中写着:

Perlv5.18包含对多个哈希函数的支持,并将默认值更改为ONE_AT_A_TIME_HARD,您可以通过在编译时定义一个符号来选择不同的算法。有关当前列表,请参阅安装文档。注意,从Perlv5.18开始,我们只能推荐使用默认值或SIPHASH。所有其他的都是已知的安全问题,并且只用于研究目的。

问题是,无论是在安装文件或其他来源/网站等,我可以找到如何定义这个符号。

我想要做的是将默认的ONE_AT_A_TIME_HARD哈希函数更改为ONE_AT_A_TIME_OLD,以便模拟旧的Perl5.16行为。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-14 09:00:36

这听起来像是XY的问题。通过强制将perl中的哈希算法降级为一个已知问题的哈希算法,您想要完成什么?

来自评论:

我需要运行许多用perl 5.16编写的测试用例,这些测试用例的功能依赖于旧的哈希实现,而且不可能更改代码,因为用例有数百个。

哇,这是个坏消息。找到那些开发人员,然后用一个拷贝perldata打中他们的头部。

散列是按其关联的字符串键索引的标量值的无序集合。

具体来说--如果这对你来说是个问题,那就意味着你的代码库按顺序处理散列,而它们不是,也从来没有。(只是在5.18之前它们是相当一致的,之后则是随机的)。

来自perldelta

当遇到这些更改时,清理它们的关键是接受散列是无序的集合,并采取相应的行动。

请参阅:http://blog.booking.com/hardening-perls-hash-function.html

回答你的问题-如果你真的必须:

代码语言:javascript
复制
./Configure -DPERL_HASH_FUNC_ONE_AT_A_TIME_OLD -des && make && make test

但是这是一个非常糟糕的主意,因为正如您的perl源代码包中的INSTALL文件所指出的:

注意,从Perl 5.18开始,我们只能推荐使用default或SIPHASH。所有其他的都是已知的安全问题,并且只用于研究目的。

通过这样构建您的perl,您将为使用它的每个perl程序引入一个已知的安全漏洞。

注意- ONE_AT_A_TIME_HARD是新的默认设置,因此这不会改变perl 5.18的工作方式。你的意思可能是PERL_HASH_FUNC_ONE_AT_A_TIME_OLD

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32006026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档