MD5校验和,Perl中可选128/256/512/1024/2048位

时间:2012-09-23 14:09:14

标签: perl encryption md5 rsa checksum

是否可以使用 MD5 来获取可选大小为128/256/512/1024/2048位的校验和?

Digest::MD5模块允许使用RSA MD5消息摘要算法,该算法将任意长度的消息作为输入,并生成 128位指纹作为输出。

如何使用MD5生成更大指纹?

3 个答案:

答案 0 :(得分:3)

MD5 by definition仅产生128位哈希值。

因此,您需要使用不同的哈希函数(例如,SHA-2哈希函数系列输出值最多为512 bits)或将数据分成几部分并对其进行哈希处理,之后结合哈希。

如果您可以提供有关您尝试实现的内容的更多详细信息,那么可以更轻松地提供更具体的建议。

答案 1 :(得分:3)

您无法创建该大小的MD5哈希。通常,安全散列函数已针对特定大小设计。它们具有一定大小的内部状态。

当然,您可以使用MD5创建随机字节流;只需获取前一个值并再次哈希,并继续追加结果。当然,结果的总安全性不会比数据上的原始哈希值更强。经过一段时间后,哈希值会变弱,因为每次哈希后会丢失少量的熵(这需要很长时间)。

目前你可以使用的最好的哈希函数是SHA-512,虽然它会被相同大小的SHA-3慢慢取代(但在编写时尚未标准化)。这些哈希值提供了足够的安全性,因此如果您需要更多数据,您可以简单地使用填充方法。

想到的填充方法是:

  • 专有方法,只需添加具有已知值的X个字节;
  • PBKDF2中使用的功能;
  • 内部用于PSS填充的功能(参见公共RSA PKCS#1 v2.1标准)。

如上所述,它取决于哪个应用程序最好使用。如果您不知道自己在做什么(例如看起来像),不要使用MD5 。它对于一般用途来说太破碎了,而且没有足够大的状态或输出。

答案 2 :(得分:1)

不,不是。请参阅cPAN documentation

 # Functional style
 use Digest::MD5 qw(md5 md5_hex md5_base64);

 $digest = md5($data);
 $digest = md5_hex($data);
 $digest = md5_base64($data);

Digest :: MD5模块允许您在Perl程序中使用RSA Data Security Inc. MD5消息摘要算法。该算法将任意长度的消息作为输入,并将输出产生输入的128位“指纹”或“消息摘要”。

请注意,MD5算法不像以前那么强大。自2005年以来,它很容易生成产生相同MD5摘要的不同消息。生成给定摘要的消息似乎仍然难以生成,但对于依赖摘要来唯一标识消息的应用程序而言,移动到更强大的算法可能是明智的。

  • 您可以考虑使用RSA代替。