MD5 输入/输出的最大长度是多少?

190

MD5哈希后的字符串最大长度是多少?如果没有限制,那么MD5输出值的最大长度是多少?


3
请遵循维基百科:http://en.wikipedia.org/wiki/MD5 - Frank
10个回答

279

MD5将任意长度的消息处理成一个固定长度的128位输出,通常表示为32个十六进制数字的序列。


131
备忘录:MD5哈希长度 = 128位 = 16字节 = 32个十六进制数字 - checksum
2
一个普通的编辑器,包含32个十六进制数字和字符串只包含来自'a-z'和'0-9'的数字。 - node_analyser
1
我注意到之前的评论中有一个小错误。文本应该按照引用的方式:“32个十六进制数字,字符串仅包含来自'a-z'的字母和'0-9'的数字”。 - Remis B
2
正如答案所述,输入具有任意长度。这意味着参数可以是您需要的任何长度。 - kdojeteri
1
@Peping 一个小修正:输入长度可以是所使用的编程语言中数据类型所能容纳的最大长度。例如:Java的字符串在内部使用数组,因此一个字符串只能包含(2^31)-1个字符(或更少,取决于堆大小)。这也将是您在Java中使用MD5函数的最大输入值。但从理论上讲,MD5函数确实可以处理任意长度的输入。 ;) - RicoBrassers
显示剩余6条评论

46

附加长度

将b的64位表示(填充位添加前的消息长度)附加在上一步骤的结果后面。如果b大于2^64,则仅使用低64位。

  • 哈希值始终为128位。如果您将其编码为十六进制字符串,则每个字符可以编码4位,共32个字符。
  • MD5不是加密。通常情况下,您不能“解密”MD5散列以获取原始字符串。

在此处查看更多信息


消息的长度是无限的,你所说的“消息”是什么?是输入吗?我的问题是 MD5("到底有多少个字符?"); - Shafizadeh
@Shafizadeh,你的输入可以尽可能长,以你当前所用的编程语言为例,在Java中,一个字符串可以有(2^31)-1个字符。是的,“message”就是输入。 - RicoBrassers
1
@Shafizadeh ...或者从文件中读取,输入可能会达到可用存储的最大值。 - ToolmakerSteve

15
你可以有任何长度的输入,但如果String输入太长,计算机可能会出现内存问题。输出始终为32个字符。

4
如果字符串输入太长,则其在系统中原本就不存在,除非它在文件中,在这种情况下,您可以在读取时逐块将其传递给摘要函数,换句话说,您每次只需要有“块”字节数量的输入即可。 - L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

7
该算法已经被设计成支持任意长度的输入。例如,您可以计算像DVD ISO这样的大文件的哈希值...
如果存在输入限制,则可能是由使用哈希函数的环境引起的。比如说,你想计算一个文件,但是环境有MAX_FILE限制。
但输出字符串将始终相同:32个十六进制字符(128位)!

4
一个128位的MD5哈希被表示为32个十六进制数字的序列。

4

MD5 被认为已经被攻破,因此您可能希望使用 SHA-1 代替 MD5

您可以在 这篇维基百科文章 中了解更多关于 MD5 漏洞的信息。


14
它的创造者、Bruce Schneier和国土安全部都一致认为它已经破解了……你需要多少个“谣言传播”来说服你,它实际上已经被破解了很长时间?事实是,很容易找到一个输入来生成一个特定的哈希值。当然,您可以通过对输入进行盐处理并使用足够大的盐来减轻这种风险。顺便说一句:SHA-1也被认为是同样不安全的。如果您建议人们升级,请建议他们升级到SHA-2。 - kander
3
@kander,我只需要一个很简单的例子。给定一个哈希值,你能提供源字符串吗?不是指向一篇好文章的链接,也不是某人的观点,而只是一个源字符串? - Your Common Sense
2
没有人真正提到“损坏”一词的确切含义。尽管@YourCommonSense说得有道理。 - JSmyth
2
哈希不仅仅用于安全。 - Salami
5
您在谈论MD5的安全用途,但是MD5(或任何其他哈希技术)有大量其他用途。我想将其用于通过哈希重命名文件。我肯定不会担心MD5的冲突抵抗力。您发布的所有内容仍然正确,这只是我的个人看法。 - tfrascaroli
显示剩余9条评论

3

据我所知,MD5输入的长度没有限制。一些实现需要将整个输入加载到内存中,然后再将其传递给MD5函数(即,实现作用于一个内存块,而不是流),但这不是算法本身的限制。输出始终为128位。请注意,MD5不是加密算法,而是密码哈希。这意味着您可以使用它来验证数据块的完整性,但不能反向哈希。

还要注意,MD5被认为已被破解,因此不应将其用于任何与安全有关的事情(仍可用于验证下载文件等完整性)。


2

MD5算法会将消息长度附加到最后一个块的最后64位,因此可以说该消息最长可达2^64位(18e18位)。


这将是18艾克斯比特,或18艾3拍比特,或18艾6太比特,或18艾9吉比特。 - MARCILIO DACOL NETO

0

MD5输入的最大长度:可定义和可用的比特流的最大长度。 比特流的定义约束可能取决于操作系统、硬件限制、编程语言等等...

MD5输出的长度:固定长度始终为128位。 为了更容易显示,它们通常以十六进制显示,因为每个十六进制数字(0-1-2-3-4-5-6-7-8-9-A-B-C-D-E-F)占用4位空间,所以其输出可以显示为32个十六进制数字。 128位=16字节=32个十六进制数字。


-1
MD5输出始终为32个字符。因此,在数据库中设置密码的字符限制时,不要给出低于32个字符的值。如果您给出低于32个字符的值,则密码将被不完全记录在数据库中,因此用户在登录系统时会遇到错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接