Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/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';s相当于Python';s哈希(或Java的哈希代码)函数?_Python_Perl_Hash - Fatal编程技术网

Perl';s相当于Python';s哈希(或Java的哈希代码)函数?

Perl';s相当于Python';s哈希(或Java的哈希代码)函数?,python,perl,hash,Python,Perl,Hash,Python的hash函数的摘要文档如下: Type: builtin_function_or_method String form: <built-in function hash> Namespace: Python builtin Docstring: hash(object) -> integer Return a hash value for the object. Two objects with the same value have the

Python的
hash
函数的摘要文档如下:

Type:        builtin_function_or_method
String form: <built-in function hash>
Namespace:   Python builtin
Docstring:
hash(object) -> integer

Return a hash value for the object.  Two objects with the same value have
the same hash value.  The reverse is not necessarily true, but likely.
类型:内置函数或方法
字符串形式:
名称空间:Python内置
文档字符串:
散列(对象)->整数
返回对象的哈希值。具有相同值的两个对象具有相同的
相同的散列值。相反的情况不一定是真的,但很可能是真的。
(例如,
hash
函数在应用于上述文档字符串时返回整数307166466461282235。)

Perl是否有一个等价的函数


编辑:对于任何参数,我所寻找的不需要返回与Python的
哈希
函数相同的值。

对对象进行哈希有多种方法。使用perl实现这一点的最佳方法是通过一个模块

例如

这将是这样工作的:

use Digest::SHA qw(sha1 sha1_hex sha1_base64 ...);

$digest = sha1($data);
$digest = sha1_hex($data);
$digest = sha1_base64($data);

$digest = sha256($data);
$digest = sha384_hex($data);
$digest = sha512_base64($data);
通过在cpanshell
perl-MCPAN-eshell
中运行
i/Digest/
可以看到各种选择的列表<代码>摘要::MD5是另一种常见的选择


我建议对于琐碎的实现,使用哪一种实际上没有多大区别。如果它是非平凡的,那么就存在与哈希冲突相关的安全问题

首先,应该重载对象的“to string”方法。如果您只想在散列中使用对象作为键,这可能就足够了。Perl为快速键值访问应用一些内部哈希机制


其次,您可以对结果字符串应用任何哈希机制,例如,或者,如果您不需要强大的安全性要求,那么您可以使用(宣布的杂音哈希速度为5Gb/s!)

您是否在寻找任何散列函数,或是专门提供与Python相同结果的散列函数(至少是原始值)@Quentin:谢谢您的提问;我在我的帖子中添加了一个澄清。简而言之,同意Python的
hash
是没有必要的(尽管,现在您提到了它,这会有点不错,但只是作为一种愉快的奖励,根本不是必需的)。
sub hash{return unpack(“%32W*”,“@”)}
,因为Python函数只对字符串有意义?这将散列一个字节字符串。这可能是他们需要的,也可能不是。