<?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=SHA-2</id>
	<title>SHA-2 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=SHA-2"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=SHA-2&amp;action=history"/>
	<updated>2026-07-15T08:24:37Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=SHA-2&amp;diff=634444&amp;oldid=prev</id>
		<title>imported&gt;Vesekskiy：​回退~2026-22149-66（讨论）做出的1次编辑</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=SHA-2&amp;diff=634444&amp;oldid=prev"/>
		<updated>2026-04-11T09:24:19Z</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/~2026-22149-66&quot; title=&quot;Special:用户贡献/~2026-22149-66&quot;&gt;~2026-22149-66&lt;/a&gt;（&lt;a href=&quot;/index.php?title=User_talk:~2026-22149-66&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User talk:~2026-22149-66（页面不存在）&quot;&gt;讨论&lt;/a&gt;）做出的1次编辑&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Multiple issues|&lt;br /&gt;
{{Cleanup-jargon|time=2021-10-06T02:42:47+00:00}}&lt;br /&gt;
{{Refimprove|time=2023-09-22T12:31:10+00:00}}&lt;br /&gt;
{{Expand language|1=en|time=2023-09-22T12:32:46+00:00}}&lt;br /&gt;
}}&lt;br /&gt;
{{noteTA&lt;br /&gt;
|G1=IT&lt;br /&gt;
}}&lt;br /&gt;
{{SHA-box}}&lt;br /&gt;
{{Infobox encryption method&lt;br /&gt;
| name = SHA-2&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 = 2001年&lt;br /&gt;
| series = ([[SHA-0]]), [[SHA-1]], SHA-2, [[SHA-3]]&lt;br /&gt;
| derived from =&lt;br /&gt;
| derived to =&lt;br /&gt;
| related to =&lt;br /&gt;
| certification = [[聯邦資料處理標準|FIPS]] PUB 180-4, {{le|CRYPTREC|CRYPTREC}}, {{le|NESSIE|NESSIE}}&lt;br /&gt;
&amp;lt;!-- Detail --&amp;gt;&lt;br /&gt;
| digest size = 224, 256, 384, or 512 bits&lt;br /&gt;
| structure = 配合Davies–Meyer壓縮函數的{{le|默克爾-達姆加德結構|Merkle–Damgård construction}}&lt;br /&gt;
| rounds = 64 or 80&lt;br /&gt;
| cryptanalysis = A 2011 attack breaks [[preimage resistance]] for 57 out of 80 rounds of SHA-512, and 52 out of 64 rounds for SHA-256.&amp;lt;ref name=preimage-khov&amp;gt;{{Cite journal | author1=Dmitry Khovratovich, Christian Rechberger | author2=Alexandra Savelieva | lastauthoramp=yes | title=Bicliques for Preimages&amp;amp;#58; Attacks on Skein-512 and the SHA-2 family | year=2011 | journal=IACR Cryptology ePrint Archive | volume=2011:286 | url=http://eprint.iacr.org/2011/286.pdf | access-date=2016-12-15 | archive-date=2016-07-22 | archive-url=https://web.archive.org/web/20160722035610/http://eprint.iacr.org/2011/286.pdf | dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
Pseudo-collision attack against up to 46 rounds of SHA-256.&amp;lt;ref name=collision-lamberger&amp;gt;{{Cite journal | author1=Mario Lamberger | author2=Florian Mendel | lastauthoramp=yes | title=Higher-Order Differential Attack on Reduced SHA-256 | year=2011 | journal=IACR Cryptology ePrint Archive | volume=2011:37 | url=http://eprint.iacr.org/2011/037.pdf | access-date=2016-12-15 | archive-date=2017-03-29 | archive-url=https://web.archive.org/web/20170329070654/http://eprint.iacr.org/2011/037.pdf | dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;SHA-2&amp;#039;&amp;#039;&amp;#039;，名稱來自於&amp;#039;&amp;#039;&amp;#039;安全散列演算法2&amp;#039;&amp;#039;&amp;#039;（{{langx|en|Secure Hash Algorithm 2}}）的縮寫，是一種[[密碼雜湊函數]]演算法標準，由[[美國國家安全局]]研發&amp;lt;ref&amp;gt;{{cite web |url=http://www.staff.science.uu.nl/~werkh108/docs/study/Y5_07_08/infocry/project/Cryp08.pdf |title=On the Secure Hash Algorithm family |deadurl=yes |archiveurl=https://web.archive.org/web/20141014172403/http://www.staff.science.uu.nl/~werkh108/docs/study/Y5_07_08/infocry/project/Cryp08.pdf |archivedate=2014-10-14 |accessdate=2016-12-15 }}&amp;lt;/ref&amp;gt;，由[[美國國家標準與技術研究院]]（NIST）在2001年發布。屬於[[SHA家族|SHA演算法]]之一，是[[SHA-1]]的後繼者。其下又可再分為六個不同的演算法標準，包括了：SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。&lt;br /&gt;
&lt;br /&gt;
== 开发 ==&lt;br /&gt;
[[File:SHA-2.svg|thumbnail|right|400px|SHA-2的第t個加密迴圈。圖中的深藍色方塊是事先定義好的非線性函數。ABCDEFGH一開始分別是八個初始值，K&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt;是第t個金鑰，W&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt;是本區塊產生第t個word。原訊息被切成固定長度的區塊，對每一個區塊，產生n個word（n視演算法而定），透過重複運作迴圈n次對ABCDEFGH這八個工作區段循環加密。最後一次迴圈所產生的八段字串合起來即是此區塊對應到的雜湊字串。若原訊息包含數個區塊，則最後還要將這些區塊產生的雜湊字串加以混合才能產生最後的雜湊字串。]]&lt;br /&gt;
&lt;br /&gt;
NIST發佈了三個額外的SHA變體，這三個函數都將訊息對應到更長的訊息摘要。以它們的摘要長度（以[[位元]]計算）加在原名後面來命名：SHA-256，SHA-384和SHA-512。它們發佈於2001年的FIPS PUB 180-2草稿中，隨即通過審查和評論。包含SHA-1的FIPS PUB 180-2，於2002年以官方標準發佈。2004年2月，發佈了一次FIPS PUB 180-2的變更通知，加入了一個額外的變種SHA-224，這是為了符合雙金鑰[[3DES]]所需的金鑰長度而定義&amp;lt;ref&amp;gt;{{cite web|url=http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf|format=PDF|title=FIPS 180-2 with Change Notice 1|website=csrc.nist.gov|accessdate=2017-01-13|archive-date=2012-03-18|archive-url=https://www.webcitation.org/66GOBwst5?url=http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf|dead-url=no}}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
SHA-256和SHA-512是很新的雜湊函數，前者以定義一個word為32位元，後者則定義一個word為64位元。它們分別使用了不同的偏移量，或用不同的常數，然而，實際上二者結構是相同的，只在迴圈執行的次數上有所差異。SHA-224以及SHA-384則是前述二種雜湊函數的截短版，利用不同的初始值做計算。&lt;br /&gt;
&lt;br /&gt;
Gilbert和Handschuh在2003年曾對這些新變種作過一些研究，聲稱他們沒有找到弱點。&amp;lt;ref&amp;gt;Henri Gilbert, Helena Handschuh: Security Analysis of SHA-256 and Sisters. Selected Areas in Cryptography 2003: pp175–193&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 演算法 ==&lt;br /&gt;
以下是SHA-256演算法的[[虛擬碼]]。注意，64個word &amp;lt;code&amp;gt;w[16..63]&amp;lt;/code&amp;gt;中的位元比起SHA-1演算法，混合的程度大幅提升。&lt;br /&gt;
&lt;br /&gt;
 -{}-&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;注意：全部變量皆是32位元-{zh-cn:无符号;zh-tw:非帶號}-整數，且溢位時以模2&amp;lt;sup&amp;gt;32&amp;lt;/sup&amp;gt;處理&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 -{}-&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;初始化&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;-{}-（以下是前8個質數2..19平方根小數部分的前32位元）：&amp;lt;/span&amp;gt;&lt;br /&gt;
 h0 := 0x6a09e667&lt;br /&gt;
 h1 := 0xbb67ae85&lt;br /&gt;
 h2 := 0x3c6ef372&lt;br /&gt;
 h3 := 0xa54ff53a&lt;br /&gt;
 h4 := 0x510e527f&lt;br /&gt;
 h5 := 0x9b05688c&lt;br /&gt;
 h6 := 0x1f83d9ab&lt;br /&gt;
 h7 := 0x5be0cd19&lt;br /&gt;
&lt;br /&gt;
 -{}-&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;初始化每輪用的常數&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;（前64個質數2..311的立方根小數部分的前32位元）：&amp;lt;/span&amp;gt;&lt;br /&gt;
 k[0..63] :=&lt;br /&gt;
    0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,&lt;br /&gt;
    0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,&lt;br /&gt;
    0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,&lt;br /&gt;
    0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,&lt;br /&gt;
    0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,&lt;br /&gt;
    0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,&lt;br /&gt;
    0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,&lt;br /&gt;
    0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2&lt;br /&gt;
&lt;br /&gt;
 -{}-&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;預處理：&amp;lt;/span&amp;gt;&lt;br /&gt;
 訊息後接上一個位元&amp;#039;1&amp;#039;&lt;br /&gt;
 再接上k個&amp;#039;0&amp;#039;，其中k為最小的非負整數，使所得的訊息長度（位元數）[[同余]]於448(mod 512)&lt;br /&gt;
 將預處理前訊息的長度（位元數）寫成64位元[[位元組順序|大端序]]整數，接在最尾&lt;br /&gt;
&lt;br /&gt;
 -{}-&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;將訊息分成若干連續段處理，每段512位元：&amp;lt;/span&amp;gt;&lt;br /&gt;
 將訊息分成512位元的分段&lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;for&amp;#039;&amp;#039;&amp;#039; 每段&lt;br /&gt;
     將該段再分成十六個32位元的[[字 (计算机)|字組]]，看成大端序的整數w[0..15]&lt;br /&gt;
&lt;br /&gt;
     -{}-&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;從該十六個字組，計算多四十八個同樣長度的字組，得到總共六十四個32位元字組：&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;#039;&amp;#039;&amp;#039;for&amp;#039;&amp;#039;&amp;#039; i &amp;#039;&amp;#039;&amp;#039;from&amp;#039;&amp;#039;&amp;#039; 16 &amp;#039;&amp;#039;&amp;#039;to&amp;#039;&amp;#039;&amp;#039; 63&lt;br /&gt;
         s0 := (w[i-15] &amp;#039;&amp;#039;&amp;#039;rightrotate&amp;#039;&amp;#039;&amp;#039; 7) &amp;#039;&amp;#039;&amp;#039;xor&amp;#039;&amp;#039;&amp;#039; (w[i-15] &amp;#039;&amp;#039;&amp;#039;rightrotate&amp;#039;&amp;#039;&amp;#039; 18) &amp;#039;&amp;#039;&amp;#039;xor&amp;#039;&amp;#039;&amp;#039;(w[i-15] &amp;#039;&amp;#039;&amp;#039;rightshift&amp;#039;&amp;#039;&amp;#039; 3)&lt;br /&gt;
         s1 := (w[i-2] &amp;#039;&amp;#039;&amp;#039;rightrotate&amp;#039;&amp;#039;&amp;#039; 17) &amp;#039;&amp;#039;&amp;#039;xor&amp;#039;&amp;#039;&amp;#039; (w[i-2] &amp;#039;&amp;#039;&amp;#039;rightrotate&amp;#039;&amp;#039;&amp;#039; 19) &amp;#039;&amp;#039;&amp;#039;xor&amp;#039;&amp;#039;&amp;#039;(w[i-2] &amp;#039;&amp;#039;&amp;#039;rightshift&amp;#039;&amp;#039;&amp;#039; 10)&lt;br /&gt;
         w[i] := w[i-16] &amp;#039;&amp;#039;&amp;#039;+&amp;#039;&amp;#039;&amp;#039; s0 &amp;#039;&amp;#039;&amp;#039;+&amp;#039;&amp;#039;&amp;#039; w[i-7] &amp;#039;&amp;#039;&amp;#039;+&amp;#039;&amp;#039;&amp;#039; s1&lt;br /&gt;
&lt;br /&gt;
     -{}-&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;初始化此段的雜湊值：&amp;lt;/span&amp;gt;&lt;br /&gt;
     a := h0&lt;br /&gt;
     b := h1&lt;br /&gt;
     c := h2&lt;br /&gt;
     d := h3&lt;br /&gt;
     e := h4&lt;br /&gt;
     f := h5&lt;br /&gt;
     g := h6&lt;br /&gt;
     h := h7&lt;br /&gt;
&lt;br /&gt;
     -{}-&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;主迴圈：&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;#039;&amp;#039;&amp;#039;for&amp;#039;&amp;#039;&amp;#039; i &amp;#039;&amp;#039;&amp;#039;from&amp;#039;&amp;#039;&amp;#039; 0 &amp;#039;&amp;#039;&amp;#039;to&amp;#039;&amp;#039;&amp;#039; 63&lt;br /&gt;
         s0 := (a &amp;#039;&amp;#039;&amp;#039;rightrotate&amp;#039;&amp;#039;&amp;#039; 2) &amp;#039;&amp;#039;&amp;#039;xor&amp;#039;&amp;#039;&amp;#039; (a &amp;#039;&amp;#039;&amp;#039;rightrotate&amp;#039;&amp;#039;&amp;#039; 13) &amp;#039;&amp;#039;&amp;#039;xor&amp;#039;&amp;#039;&amp;#039;(a &amp;#039;&amp;#039;&amp;#039;rightrotate&amp;#039;&amp;#039;&amp;#039; 22)&lt;br /&gt;
         maj := (a &amp;#039;&amp;#039;&amp;#039;and&amp;#039;&amp;#039;&amp;#039; b) &amp;#039;&amp;#039;&amp;#039;xor&amp;#039;&amp;#039;&amp;#039; (a &amp;#039;&amp;#039;&amp;#039;and&amp;#039;&amp;#039;&amp;#039; c) &amp;#039;&amp;#039;&amp;#039;xor&amp;#039;&amp;#039;&amp;#039;(b &amp;#039;&amp;#039;&amp;#039;and&amp;#039;&amp;#039;&amp;#039; c)&lt;br /&gt;
         t2 := s0 + maj&lt;br /&gt;
         s1 := (e &amp;#039;&amp;#039;&amp;#039;rightrotate&amp;#039;&amp;#039;&amp;#039; 6) &amp;#039;&amp;#039;&amp;#039;xor&amp;#039;&amp;#039;&amp;#039; (e &amp;#039;&amp;#039;&amp;#039;rightrotate&amp;#039;&amp;#039;&amp;#039; 11) &amp;#039;&amp;#039;&amp;#039;xor&amp;#039;&amp;#039;&amp;#039;(e &amp;#039;&amp;#039;&amp;#039;rightrotate&amp;#039;&amp;#039;&amp;#039; 25)&lt;br /&gt;
         ch := (e &amp;#039;&amp;#039;&amp;#039;and&amp;#039;&amp;#039;&amp;#039; f) &amp;#039;&amp;#039;&amp;#039;xor&amp;#039;&amp;#039;&amp;#039; ((&amp;#039;&amp;#039;&amp;#039;not&amp;#039;&amp;#039;&amp;#039; e) &amp;#039;&amp;#039;&amp;#039;and&amp;#039;&amp;#039;&amp;#039; g)&lt;br /&gt;
         t1 := h + s1 + ch + k[i] + w[i]&lt;br /&gt;
         h := g&lt;br /&gt;
         g := f&lt;br /&gt;
         f := e&lt;br /&gt;
         e := d + t1&lt;br /&gt;
         d := c&lt;br /&gt;
         c := b&lt;br /&gt;
         b := a&lt;br /&gt;
         a := t1 + t2&lt;br /&gt;
&lt;br /&gt;
     -{}-&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;將此段的雜湊值加進總和：&amp;lt;/span&amp;gt;&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;
     h4 := h4 + e&lt;br /&gt;
     h5 := h5 + f&lt;br /&gt;
     h6 := h6 + g&lt;br /&gt;
     h7 := h7 + h&lt;br /&gt;
&lt;br /&gt;
 -{}-&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;輸出最總的雜湊值（大端序）：&amp;lt;/span&amp;gt;&lt;br /&gt;
 digest = hash = h0 &amp;#039;&amp;#039;&amp;#039;append&amp;#039;&amp;#039;&amp;#039; h1 &amp;#039;&amp;#039;&amp;#039;append&amp;#039;&amp;#039;&amp;#039; h2 &amp;#039;&amp;#039;&amp;#039;append&amp;#039;&amp;#039;&amp;#039; h3 &amp;#039;&amp;#039;&amp;#039;append&amp;#039;&amp;#039;&amp;#039; h4 &amp;#039;&amp;#039;&amp;#039;append&amp;#039;&amp;#039;&amp;#039; h5 &amp;#039;&amp;#039;&amp;#039;append&amp;#039;&amp;#039;&amp;#039; h6 &amp;#039;&amp;#039;&amp;#039;append&amp;#039;&amp;#039;&amp;#039; h7&lt;br /&gt;
&lt;br /&gt;
其中&amp;lt;code&amp;gt;ch&amp;lt;/code&amp;gt;函數及&amp;lt;code&amp;gt;maj&amp;lt;/code&amp;gt;函數可利用前述SHA-1的優化方式改寫。&lt;br /&gt;
&lt;br /&gt;
SHA-224和SHA-256基本上是相同的，除了：&lt;br /&gt;
* &amp;lt;code&amp;gt;h0&amp;lt;/code&amp;gt;到&amp;lt;code&amp;gt;h7&amp;lt;/code&amp;gt;的初始值不同，以及&lt;br /&gt;
* SHA-224輸出時截掉&amp;lt;code&amp;gt;h7&amp;lt;/code&amp;gt;的函數值。&lt;br /&gt;
&lt;br /&gt;
SHA-512和SHA-256的結構相同，但：&lt;br /&gt;
* SHA-512所有的數字都是64位元，&lt;br /&gt;
* SHA-512執行80次加密迴圈而非64次，&lt;br /&gt;
* SHA-512初始值和常數拉長成64位元，以及&lt;br /&gt;
* 二者位元的偏移量和循環位移量不同。&lt;br /&gt;
&lt;br /&gt;
SHA-384和SHA-512基本上是相同的，除了：&lt;br /&gt;
* &amp;lt;code&amp;gt;h0&amp;lt;/code&amp;gt;到&amp;lt;code&amp;gt;h7&amp;lt;/code&amp;gt;的初始值不同，以及&lt;br /&gt;
* SHA-384輸出時截掉&amp;lt;code&amp;gt;h6&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;h7&amp;lt;/code&amp;gt;的函數值。&lt;br /&gt;
&lt;br /&gt;
==实现==&lt;br /&gt;
Windows操作系统的System32目录下有certutil.exe，可以直接调用，例如：&lt;br /&gt;
 certutil -hashfile yourfilename.ext SHA256&lt;br /&gt;
==参考文献==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&lt;br /&gt;
{{密碼學|hash}}&lt;br /&gt;
&lt;br /&gt;
[[Category:密码散列函数]]&lt;br /&gt;
[[Category:密码学]]&lt;br /&gt;
[[Category:带有伪代码示例的条目]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Vesekskiy</name></author>
	</entry>
</feed>