Perl 等同于 Python 的散列(或 Java 的散列码)函数?
Perl's equivalent of Python's hash (or Java's hashCode) function?
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.
(例如,hash
函数应用于上面的文档字符串时 return 是整数 3071661466461282235。)
是否有 Perl 的等效函数?
编辑:我正在寻找的东西不需要 return 与任何参数的 Python 的 hash
函数相同的值。
有多种散列对象的方法。使用 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);
您可以在 CPAN shell perl -MCPAN -e shell
中通过 运行 i /Digest/
查看各种选择的列表。 Digest::MD5
是另一个常见的选择。
对于微不足道的实现,我建议您使用它实际上并没有太大的区别。如果它不是微不足道的,那么就会存在与哈希冲突相关的安全问题。
首先,您应该重载对象的 "to-string" 方法。如果您只想将对象用作散列中的键,这可能就足够了。 Perl 应用一些内部散列机制来快速 key-value 访问。
其次,您可以对生成的字符串应用任何哈希机制,例如Digest::SHA, or, if you don't need strong security requirements, then yo can use Digest::MurmurHash(MurmurHash 公布的速度是 5Gb/s!)。
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.
(例如,hash
函数应用于上面的文档字符串时 return 是整数 3071661466461282235。)
是否有 Perl 的等效函数?
编辑:我正在寻找的东西不需要 return 与任何参数的 Python 的 hash
函数相同的值。
有多种散列对象的方法。使用 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);
您可以在 CPAN shell perl -MCPAN -e shell
中通过 运行 i /Digest/
查看各种选择的列表。 Digest::MD5
是另一个常见的选择。
对于微不足道的实现,我建议您使用它实际上并没有太大的区别。如果它不是微不足道的,那么就会存在与哈希冲突相关的安全问题。
首先,您应该重载对象的 "to-string" 方法。如果您只想将对象用作散列中的键,这可能就足够了。 Perl 应用一些内部散列机制来快速 key-value 访问。
其次,您可以对生成的字符串应用任何哈希机制,例如Digest::SHA, or, if you don't need strong security requirements, then yo can use Digest::MurmurHash(MurmurHash 公布的速度是 5Gb/s!)。