0

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

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

如何使用 MD5 产生更大的指纹?

4

3 回答 3

3

根据定义, MD5只产生一个 128 位的哈希值。

因此,您要么需要使用不同的散列函数(例如,SHA-2系列散列函数输出高达512 位的值),要么将数据分成几部分并对它们进行散列,然后再组合散列。

如果您可以提供有关您要实现的目标的更多详细信息,那么它会更容易提供更具体的建议。

于 2012-09-23T14:15:36.137 回答
3

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

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

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

想到的填充方法是:

  • 专有方法简单地添加 X 个已知值的字节;
  • PBKDF2 中使用的函数;
  • the function as used internally for PSS padding (see the public RSA PKCS#1 v2.1 standards).

As said, it depends on the application which one is the best to use. If you don't know what you are doing (such as it seems), don't use MD5. It's too broken for general use, and it does not have a big enough state or output.

于 2012-09-23T14:54:15.797 回答
1

不它不是。请参阅cPAN 文档

 # 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 Message Digest 算法。该算法将任意长度的消息作为输入,并生成输入的 128 位“指纹”或“消息摘要”作为输出。

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

  • 您可以考虑改用RSA
于 2012-09-23T14:15:45.243 回答