<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=MD5</id>
	<title>MD5 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=MD5"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=MD5&amp;action=history"/>
	<updated>2026-07-16T19:09:48Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=MD5&amp;diff=77237&amp;oldid=prev</id>
		<title>imported&gt;暁月凛奈：​回退~2025-32654-02（对话）的编辑，改回Haycrendham的最后一个版本</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=MD5&amp;diff=77237&amp;oldid=prev"/>
		<updated>2025-11-10T23:53:56Z</updated>

		<summary type="html">&lt;p&gt;回退&lt;a href=&quot;/wiki/Special:%E7%94%A8%E6%88%B7%E8%B4%A1%E7%8C%AE/~2025-32654-02&quot; title=&quot;Special:用户贡献/~2025-32654-02&quot;&gt;~2025-32654-02&lt;/a&gt;（&lt;a href=&quot;/index.php?title=User_talk:~2025-32654-02&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User talk:~2025-32654-02（页面不存在）&quot;&gt;对话&lt;/a&gt;）的编辑，改回&lt;a href=&quot;/wiki/Special:%E7%94%A8%E6%88%B7%E8%B4%A1%E7%8C%AE/Haycrendham&quot; title=&quot;Special:用户贡献/Haycrendham&quot;&gt;Haycrendham&lt;/a&gt;的最后一个版本&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Rough translation|en:{{Wikidata sitelink|lang=en}}|time=2025-08-20T11:45:53+00:00}}&lt;br /&gt;
{{NoteTA&lt;br /&gt;
|G1=Math&lt;br /&gt;
|G2=IT&lt;br /&gt;
}}&lt;br /&gt;
{{区块加解密方块&lt;br /&gt;
| name           = MD5&lt;br /&gt;
| image          = &lt;br /&gt;
| caption        = &lt;br /&gt;
&amp;lt;!-- General --&amp;gt;&lt;br /&gt;
| designers      = [[罗纳德·李维斯特]]&lt;br /&gt;
| publish date   = 1992年4月&lt;br /&gt;
| series         = [[MD2]]、[[MD4]]、MD5、[[MD6]]&lt;br /&gt;
| derived from   = &lt;br /&gt;
| derived to     = &lt;br /&gt;
| related to     = &lt;br /&gt;
| certification  = &lt;br /&gt;
&amp;lt;!-- Detail --&amp;gt;&lt;br /&gt;
| digest size    = 128位元&lt;br /&gt;
| block size     = 512位元&lt;br /&gt;
| structure      = {{le|Merkle–Damgård construction}}&lt;br /&gt;
| rounds         = 4&amp;lt;ref&amp;gt;RFC 1321, section 3.4, &amp;quot;Step 4. Process Message in 16-Word Blocks&amp;quot;, page 5.&amp;lt;/ref&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;MD5訊息摘要演算法&amp;#039;&amp;#039;&amp;#039;（{{langx|en|MD5 Message-Digest Algorithm}}），一種被廣泛使用的[[密碼雜湊函數]]，可以產生出一個128位元（16個[[字节]]）的[[散列]]值（hash value），用于确保信息传输完整一致。MD5由美國密碼學家[[罗纳德·李维斯特]]（{{lang|en|Ronald Linn Rivest}}）設計，於1992年公開，用以取代[[MD4]]演算法。這套演算法的程序在 RFC 1321 中被加以規範。&lt;br /&gt;
&lt;br /&gt;
将[[数据]]（如一段文字）运算变为另一固定长度值，是雜湊算法的基础原理。&lt;br /&gt;
&lt;br /&gt;
1996年後被證實存在弱點，可以被加以[[破解]]，對於需要高度安全性的資料，專家一般建議改用其他演算法，如[[SHA-2]]。2004年，證實MD5演算法無法防止{{tsl|en|Collision_attack|碰撞攻击}}，因此不適用於安全性認證，如[[SSL]][[公開金鑰認證]]或是[[數位簽章]]等用途。&lt;br /&gt;
&lt;br /&gt;
== 历史与密码学 ==&lt;br /&gt;
1992年8月，罗纳德·李维斯特向[[互联网工程任务组]]（IETF）提交了一份重要文件，描述了这种算法的原理。由于这种算法的公开性和安全性，在90年代被广泛使用在各种程序语言中，用以確保资料傳遞無誤等。&amp;lt;ref name=&amp;quot;梁斌&amp;quot;&amp;gt;{{cite book |author=梁斌 |others=孙学瑛 (责任编辑) |title=走进搜索引擎 |publisher=[[电子工业出版社]] |ISBN=978-7-121-04922-4 |edition=第1版 |section=第3章“搜索引擎的下载系统”第4节“网页抓取原理” |page=51 |language=zh-cn |date=2007年10月 |accessdate=2017年10月9日}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MD5由[[MD4]]、MD3、[[MD2]]改进而来，主要增强算法复杂度和不可逆性。&lt;br /&gt;
&lt;br /&gt;
== 应用 ==&lt;br /&gt;
MD5曾被用於檔案校驗、[[SSL]]/[[TLS]]、[[IPsec]]、[[Secure Shell|SSH]]，但MD5早已被發現有明顯的缺陷。&lt;br /&gt;
&lt;br /&gt;
== 算法 ==&lt;br /&gt;
[[File:MD5.png|right|thumbnail|300px|Figure 1. 一个MD5运算— 由类似的64次循环构成，分成4组16次。&amp;#039;&amp;#039;F&amp;#039;&amp;#039; 一个非线性函数；一个函数运算一次。&amp;#039;&amp;#039;M&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;#039;&amp;#039; 表示一个 32-bits 的输入数据，&amp;#039;&amp;#039;K&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;#039;&amp;#039; 表示一个 32-bits 常数，用来完成每次不同的计算。]]&lt;br /&gt;
&lt;br /&gt;
MD5是輸入不定長度信息，輸出固定長度128-bits的演算法。经过程序流程，生成四个32位数据，最后联合起来成为一个128-bits[[散列]]。基本方式为，求餘、取餘、调整长度、与链接变量进行循环运算。得出结果。&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;F(X,Y,Z) = (X\wedge{Y}) \vee (\neg{X} \wedge{Z})&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;G(X,Y,Z) = (X\wedge{Z}) \vee (Y \wedge \neg{Z})&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;H(X,Y,Z) = X \oplus Y \oplus Z&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;I(X,Y,Z) = Y \oplus (X \vee \neg{Z})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\oplus, \wedge, \vee, \neg&amp;lt;/math&amp;gt; 是 &amp;#039;&amp;#039;XOR&amp;#039;&amp;#039;, &amp;#039;&amp;#039;AND&amp;#039;&amp;#039;, &amp;#039;&amp;#039;OR&amp;#039;&amp;#039; , &amp;#039;&amp;#039;NOT&amp;#039;&amp;#039; 的符号。&lt;br /&gt;
&lt;br /&gt;
== 伪代码 ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
//Note: All variables are unsigned 32 bits and wrap modulo 2^32 when calculating&lt;br /&gt;
var int[64] r, k&lt;br /&gt;
&lt;br /&gt;
//r specifies the per-round shift amounts&lt;br /&gt;
r[ 0..15]：= {7, 12, 17, 22,  7, 12, 17, 22,  7, 12, 17, 22,  7, 12, 17, 22} &lt;br /&gt;
r[16..31]：= {5,  9, 14, 20,  5,  9, 14, 20,  5,  9, 14, 20,  5,  9, 14, 20}&lt;br /&gt;
r[32..47]：= {4, 11, 16, 23,  4, 11, 16, 23,  4, 11, 16, 23,  4, 11, 16, 23}&lt;br /&gt;
r[48..63]：= {6, 10, 15, 21,  6, 10, 15, 21,  6, 10, 15, 21,  6, 10, 15, 21}&lt;br /&gt;
&lt;br /&gt;
//Use binary integer part of the sines of integers as constants:&lt;br /&gt;
for i from 0 to 63&lt;br /&gt;
    k[i] := floor(abs(sin(i + 1)) × 2^32)&lt;br /&gt;
&lt;br /&gt;
//Initialize variables:&lt;br /&gt;
var int h0 := 0x67452301&lt;br /&gt;
var int h1 := 0xEFCDAB89&lt;br /&gt;
var int h2 := 0x98BADCFE&lt;br /&gt;
var int h3 := 0x10325476&lt;br /&gt;
&lt;br /&gt;
//Pre-processing:&lt;br /&gt;
append &amp;quot;1&amp;quot; bit to message&lt;br /&gt;
append &amp;quot;0&amp;quot; bits until message length in bits ≡ 448 (mod 512)&lt;br /&gt;
append bit length of message as 64-bit little-endian integer to message&lt;br /&gt;
&lt;br /&gt;
//Process the message in successive 512-bit chunks:&lt;br /&gt;
for each 512-bit chunk of message&lt;br /&gt;
    break chunk into sixteen 32-bit little-endian words w[i], 0 ≤ i ≤ 15&lt;br /&gt;
&lt;br /&gt;
    //Initialize hash value for this chunk:&lt;br /&gt;
    var int a := h0&lt;br /&gt;
    var int b := h1&lt;br /&gt;
    var int c := h2&lt;br /&gt;
    var int d := h3&lt;br /&gt;
&lt;br /&gt;
    //Main loop:&lt;br /&gt;
    for i from 0 to 63&lt;br /&gt;
        if 0 ≤ i ≤ 15 then&lt;br /&gt;
            f := (b and c) or ((not b) and d)&lt;br /&gt;
            g := i&lt;br /&gt;
        else if 16 ≤ i ≤ 31&lt;br /&gt;
            f := (d and b) or ((not d) and c)&lt;br /&gt;
            g := (5×i + 1) mod 16&lt;br /&gt;
        else if 32 ≤ i ≤ 47&lt;br /&gt;
            f := b xor c xor d&lt;br /&gt;
            g := (3×i + 5) mod 16&lt;br /&gt;
        else if 48 ≤ i ≤ 63&lt;br /&gt;
            f := c xor (b or (not d))&lt;br /&gt;
            g := (7×i) mod 16&lt;br /&gt;
 &lt;br /&gt;
        temp := d&lt;br /&gt;
        d := c&lt;br /&gt;
        c := b&lt;br /&gt;
        b := leftrotate((a + f + k[i] + w[g]),r[i]) + b&lt;br /&gt;
        a := temp&lt;br /&gt;
    Next i&lt;br /&gt;
    //Add this chunk&amp;#039;s hash to result so far:&lt;br /&gt;
    h0 := h0 + a&lt;br /&gt;
    h1 := h1 + b &lt;br /&gt;
    h2 := h2 + c&lt;br /&gt;
    h3 := h3 + d&lt;br /&gt;
End ForEach&lt;br /&gt;
var int digest := h0 append h1 append h2 append h3 //(expressed as little-endian)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MD5散列 ==&lt;br /&gt;
一般128位的MD5散列被表示为32位[[十六进制]]数字。以下是一个43位长的仅[[ASCII]]字母列的MD5散列：&lt;br /&gt;
&lt;br /&gt;
 MD5(&amp;quot;The quick brown fox jumps over the lazy dog&amp;quot;)&lt;br /&gt;
 = 9e107d9d372bb6826bd81d3542a419d6&lt;br /&gt;
&lt;br /&gt;
即使在原文中作一个小变化（比如用c取代d）其散列也会发生巨大的变化：&lt;br /&gt;
&lt;br /&gt;
 MD5(&amp;quot;The quick brown fox jumps over the lazy &amp;#039;&amp;#039;&amp;#039;c&amp;#039;&amp;#039;&amp;#039;og&amp;quot;)&lt;br /&gt;
 = 1055d3e698d289f2af8663725127bd4b&lt;br /&gt;
&lt;br /&gt;
空文的散列为：&lt;br /&gt;
&lt;br /&gt;
 MD5(&amp;quot;&amp;quot;)&lt;br /&gt;
 = d41d8cd98f00b204e9800998ecf8427e&lt;br /&gt;
&lt;br /&gt;
==缺陷==&lt;br /&gt;
2004年的[[國際密碼討論年會]]（CRYPTO）尾聲，[[王小雲]]及其研究同事展示了寻找MD5、[[SHA-0]]及其他相關[[雜湊函數]]的雜湊衝撞的新方法&amp;lt;ref name=&amp;#039;wang_paper&amp;#039;&amp;gt;{{cite web|url=https://eprint.iacr.org/2004/199|title=Collisions for Hash Functions MD4, MD5, HAVAL-128 and RIPEMD|first1=Xiaoyun|last1=Wang|first2=Dengguo|last2=Feng|first3=Xuejia|last3=Lai|first4=Hongbo|last4=Yu|date=2020-06-09|publisher=|via=ePrint IACR|accessdate=2020-06-09|archive-date=2020-06-09|archive-url=https://web.archive.org/web/20200609173224/https://eprint.iacr.org/2004/199|dead-url=yes}}&amp;lt;/ref&amp;gt;。所謂雜湊衝撞指兩個完全不同的訊息經雜湊函數計算得出完全相同的雜湊值。根據[[鴿巢原理]]，以有長度限制的雜湊函數計算沒有長度限制的訊息是必然會有衝撞情況出現的。在此之前，已有一些研究者在有约束条件下找到多对哈希冲撞&amp;lt;ref name=&amp;quot;den Boer Bosselaers 1994 pp. 293–304&amp;quot;&amp;gt;{{cite book | last=den Boer | first=Bert | last2=Bosselaers | first2=Antoon | title=Advances in Cryptology — EUROCRYPT ’93 | chapter=Collisions for the compression function of MD5 | publisher=Springer Berlin Heidelberg | publication-place=Berlin, Heidelberg | year=1994 | isbn=978-3-540-57600-6 | issn=0302-9743 | doi=10.1007/3-540-48285-7_26 | pages=293–304}}&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Wang Lai Feng Chen 2005 pp. 1–18&amp;quot;&amp;gt;{{cite book | last=Wang | first=Xiaoyun | last2=Lai | first2=Xuejia | last3=Feng | first3=Dengguo | last4=Chen | first4=Hui | last5=Yu | first5=Xiuyuan | title=Lecture Notes in Computer Science | url=https://archive.org/details/advancesincrypto0000euro_p8e8 | chapter=Cryptanalysis of the Hash Functions MD4 and RIPEMD | publisher=Springer Berlin Heidelberg | publication-place=Berlin, Heidelberg | year=2005 | isbn=978-3-540-25910-7 | issn=0302-9743 | doi=10.1007/11426639_1 | pages=[https://archive.org/details/advancesincrypto0000euro_p8e8/page/n16 1]–18}}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
2009年，[[中國科學院]]的謝濤和馮登國仅用了2&amp;lt;sup&amp;gt;20.96&amp;lt;/sup&amp;gt;的碰撞算法複雜度，破解了MD5的碰撞抵抗，该攻击在普通计算机上运行只需要数秒钟&amp;lt;ref&amp;gt;{{cite paper |author=Tao Xie and Dengguo Feng |date=30 May 2009 |title=How To Find Weak Input Differences For MD5 Collision Attacks |url=http://eprint.iacr.org/2009/223.pdf |access-date=2010-09-21 |archive-date=2012-05-05 |archive-url=https://web.archive.org/web/20120505141344/http://eprint.iacr.org/2009/223.pdf |dead-url=no }}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
2011年，RFC 6151 禁止MD5用作[[金鑰雜湊訊息鑑別碼]]。&lt;br /&gt;
&lt;br /&gt;
== 参见 ==&lt;br /&gt;
*[[MD4]]&lt;br /&gt;
*[[SHA家族|SHA]]&lt;br /&gt;
*[[高级加密标准|AES]]&lt;br /&gt;
&lt;br /&gt;
== 参考文献 ==&lt;br /&gt;
&amp;lt;div class=&amp;quot;references-small&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{cite conference&lt;br /&gt;
 | first = Thomas A.&lt;br /&gt;
 | last = Berson&lt;br /&gt;
 | title = Differential Cryptanalysis Mod 2&amp;lt;sup&amp;gt;32&amp;lt;/sup&amp;gt; with Applications to MD5&lt;br /&gt;
 | booktitle = EUROCRYPT&lt;br /&gt;
 | year = 1992&lt;br /&gt;
 | pages = 71–80&lt;br /&gt;
 | id = ISBN 978-3-540-56413-3&lt;br /&gt;
}}&lt;br /&gt;
* {{cite book&lt;br /&gt;
 | author = Bert den Boer; Antoon Bosselaers&lt;br /&gt;
 | title = Collisions for the Compression Function of MD5&lt;br /&gt;
 | booktitle = EUROCRYPT&lt;br /&gt;
 | year = 1993&lt;br /&gt;
 | pages = 293–304&lt;br /&gt;
 | id = ISBN 978-3-540-57600-6&lt;br /&gt;
}}&lt;br /&gt;
* Hans Dobbertin, Cryptanalysis of MD5 compress. Announcement on Internet, May 1996 [http://citeseer.ist.psu.edu/dobbertin96cryptanalysis.html] {{Wayback|url=http://citeseer.ist.psu.edu/dobbertin96cryptanalysis.html |date=20080624043846 }}.&lt;br /&gt;
* {{cite journal&lt;br /&gt;
 |first       = Hans&lt;br /&gt;
 |last        = Dobbertin&lt;br /&gt;
 |title       = The Status of MD5 After a Recent Attack&lt;br /&gt;
 |journal     = CryptoBytes&lt;br /&gt;
 |volume      = 2&lt;br /&gt;
 |issue       = 2&lt;br /&gt;
 |year        = 1996&lt;br /&gt;
 |url         = http://www.rsasecurity.com/rsalabs/node.asp?id=2149&lt;br /&gt;
 |deadurl     = yes&lt;br /&gt;
 |archiveurl  = https://web.archive.org/web/20060813125129/http://www.rsasecurity.com/rsalabs/node.asp?id=2149&lt;br /&gt;
 |archivedate = 2006-08-13&lt;br /&gt;
 |access-date = 2006-07-30&lt;br /&gt;
}}&lt;br /&gt;
* {{cite journal&lt;br /&gt;
 | first = Zijie&lt;br /&gt;
 | last = Cong&lt;br /&gt;
 | title = 提高哈希安全性的一些错误做法&lt;br /&gt;
 | journal = Clifton Labratory&lt;br /&gt;
 | year = 2009&lt;br /&gt;
 | url = http://cliftonlab.com/blog/archives/27&lt;br /&gt;
}}{{dead link}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 外部链接 ==&lt;br /&gt;
* [http://www.w3.org/TR/1998/REC-DSig-label/MD5-1_0 W3C對於MD5的建議] {{Wayback|url=http://www.w3.org/TR/1998/REC-DSig-label/MD5-1_0 |date=20141228122551 }}&lt;br /&gt;
* [https://codebeautify.org/md5-hash-generator MD5哈希生成器] {{Wayback|url=https://codebeautify.org/md5-hash-generator |date=20210126195059 }}&lt;br /&gt;
&lt;br /&gt;
{{密碼學|hash}}&lt;br /&gt;
&lt;br /&gt;
[[Category:密码散列函数]]&lt;br /&gt;
[[Category:校验和算法]]&lt;br /&gt;
[[Category:已攻破的散列函数]]&lt;br /&gt;
[[Category:带有伪代码示例的条目]]&lt;/div&gt;</summary>
		<author><name>imported&gt;暁月凛奈</name></author>
	</entry>
</feed>