MD5输入/输出的最大长度


Answers:


240

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


95
自我注意:MD5哈希长度= 128 bits= 16 bytes=32 hex digits
校验和

2
[常规编辑] 32个十六进制数字,并且该字符串仅包含来自“ az”的单词和来自“ 0-9”的数字
v1h5 2014年

1
我在先前的评论中发现了一个小错误。文字应使用引号:)“ 32个十六进制数字,并且字符串仅包含来自'az'的字母和来自'0-9'的数字”
Remis B

2
@Shafizadeh作为答案,输入的长度是任意的。这意味着参数可以是您需要的任何长度。
kdojeteri

1
@Peping小修正:输入的长度可以与所用编程语言中所使用的数据类型相同。示例:Java的字符串在内部使用数组,因此,字符串只能包含(2 ^ 31)-1个字符(或更少,取决于堆大小),这也是Java中MD5函数的最大输入量。但是从理论上讲,MD5函数实际上可以处理任意长度的输入。;)
RicoBrassers

38

追加长度

b的64位表示形式(添加填充位之前的消息长度)将附加到上一步的结果中。如果b大于2 ^ 64,则仅使用b的低阶64位。

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

在这里查看更多。


消息的长度是无限的,你是什么意思的消息?是输入吗?我的问题是MD5("how many characters exactly?");
Shafizadeh,2016年

@Shafizadeh在您当前的编程语言中,您的输入可以尽可能长,在Java中,它是字符串中的(2 ^ 31)-1个字符。是的,“消息”是输入。
RicoBrassers

@Shafizadeh ...或来自文件的输入可能与可用存储一样大。
ToolmakerSteve

9

您可以有任何长度,但是如果String输入太长,则计算机上当然会出现内存问题。输出始终为32个字符。


4
如果字符串输入太长,则它首先不会在系统中存在,除非它在文件中,在这种情况下,您可以在读取它们时将块传递给摘要函数,换句话说,您只需要有block输入字节可用的时间。
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

6

该算法已设计为支持任意输入长度。即您可以计算大文件的散列,例如DVD的ISO ...

如果输入存在限制,则可能来自使用哈希函数的环境。假设您要计算文件,并且环境有MAX_FILE限制。

但是输出字符串将始终相同:32个十六进制字符(128位)!



4

您可能想要使用SHA-1而不是MD5,因为MD5被认为是损坏的。

您可以在此Wikipedia文章中阅读有关MD5漏洞的更多信息。


5
这不过是谣言而已。MD5足以胜任大多数常规的Web开发任务
您的常识2010年

11
它的创建者以及Bruce Schneier和国土安全部都同意它已被破坏...您还需要多少“谣言传播”才能使您相信它已经被破坏了一段时间?事实是,找到生成特定哈希值的输入非常容易。当然,您可以通过使用足够大的盐使输入盐化来减轻这种风险。附带说明一下:SHA-1被认为是一样坏。如果您建议人们升级,请建议他们升级到SHA-2。
kander

3
@kander哦,我需要一点。一个例子。给定一个散列,您会带来一个源字符串吗?不是链接到一些很棒的文章,不是一个人的意见,而是一个源字符串?
您的常识

2
没有人真正提到过“破损”一词的真正含义。虽然,@ YourCommonSense很有意义。
JSmyth 2014年

4
您正在谈论MD5的安全用途。但是MD5(或任何其他哈希技术)还有很多其他用途。我想通过它的哈希值使用它来重命名文件。我当然不关心MD5的抗碰撞性。您发布的所有内容仍然正确,只有我的2美分。
tfrascaroli

3

我知道的md5的输入没有限制。一些实现要求在将整个输入传递给md5函数之前将整个输入加载到内存中(即,该实现作用于内存块,而不是流),但这并不是对算法本身的限制。输出始终为128位。请注意,md5不是加密算法,而是加密哈希。这意味着您可以使用它来验证数据块的完整性,但不能反转哈希。还要注意,md5被认为是损坏的,因此您不应该将它用于任何与安全性相关的操作(可以很好地验证下载的文件等的完整性)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.