<?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=HMAC</id>
	<title>HMAC - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=HMAC"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=HMAC&amp;action=history"/>
	<updated>2026-07-15T06:40:08Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=HMAC&amp;diff=2392686&amp;oldid=prev</id>
		<title>imported&gt;Willy1018-bot：​BOTR：批量替換所有lang-xx模板為langx模板</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=HMAC&amp;diff=2392686&amp;oldid=prev"/>
		<updated>2025-07-02T13:23:59Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/%E6%9C%BA%E5%99%A8%E4%BA%BA/%E4%BD%9C%E4%B8%9A%E8%AF%B7%E6%B1%82#.E8.AB.8B.E6.B1.82.E6.89.B9.E9.87.8F.E6.9B.BF.E6.8F.9B.E6.89.80.E6.9C.89lang-xx.E6.A8.A1.E6.9D.BF.E7.82.BAlangx.E6.A8.A1.E6.9D.BF&quot; class=&quot;extiw&quot; title=&quot;wikipedia:机器人/作业请求&quot;&gt;BOTR&lt;/a&gt;：批量替換所有lang-xx模板為langx模板&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{noteTA&lt;br /&gt;
|G1=IT&lt;br /&gt;
}}&lt;br /&gt;
{{Expand English}}&lt;br /&gt;
[[File:SHAhmac.svg|thumb|400px|SHA-1 HMAC產生過程]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;HMAC&amp;#039;&amp;#039;&amp;#039; (有时扩展为 {{langx|en|keyed-hash message authentication code}}, &amp;#039;&amp;#039;&amp;#039;金鑰雜湊訊息鑑別碼&amp;#039;&amp;#039;&amp;#039;, 或 {{langx|en|hash-based message authentication code}}，&amp;#039;&amp;#039;&amp;#039;雜湊訊息鑑別碼&amp;#039;&amp;#039;&amp;#039;），是一種通過特別計算方式之後產生的[[訊息鑑別碼]]（MAC），使用[[密碼雜湊函數]]，同時結合一個加密金鑰。它可以用來保證資料的完整性，同時可以用來作某個訊息的[[身份驗證]]。&lt;br /&gt;
&lt;br /&gt;
==定義==&lt;br /&gt;
根據RFC 2104，HMAC的數學公式為：&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\textit{HMAC}(K, m) = H \Bigl( (K&amp;#039; \oplus opad) \;||\; H \bigl( (K&amp;#039; \oplus ipad) \;||\; m \bigr) \Bigr)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
其中：&lt;br /&gt;
:&amp;#039;&amp;#039;H&amp;#039;&amp;#039;為密碼[[雜湊函數]]（如[[SHA家族]]）&lt;br /&gt;
:&amp;#039;&amp;#039;K&amp;#039;&amp;#039;為[[密鑰]]（secret key）&lt;br /&gt;
:&amp;#039;&amp;#039;m&amp;#039;&amp;#039;是要认证的消息&lt;br /&gt;
:&amp;#039;&amp;#039;K&amp;#039;&amp;#039;&amp;#039;是从原始密钥&amp;#039;&amp;#039;K&amp;#039;&amp;#039;导出的另一个秘密密钥（如果K短于散列函数的输入块大小，则向右[[填充 (密码学)|填充]]（Padding）零；如果比该块大小更长，则对K进行散列）&lt;br /&gt;
:|| 代表[[串接]]&lt;br /&gt;
:⊕ 代表[[異或]]（XOR）&lt;br /&gt;
:&amp;#039;&amp;#039;opad&amp;#039;&amp;#039; 是外部填充（0x5c5c5c…5c5c，一段[[十六进制]]常量）&lt;br /&gt;
:{{Sic|&amp;#039;&amp;#039;ipad&amp;#039;&amp;#039;|hide=yes}} 是内部填充（0x363636…3636，一段十六进制常量）&lt;br /&gt;
&lt;br /&gt;
==实现==&lt;br /&gt;
下面的伪代码展示了如何实现HMAC。当使用以下散列函数之一时，块大小为64（字节）：SHA-1、MD5、RIPEMD-128/160&amp;lt;ref&amp;gt;RFC 2104, section 2, &amp;quot;Definition of HMAC&amp;quot;, page 3.&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
  &amp;#039;&amp;#039;&amp;#039;function&amp;#039;&amp;#039;&amp;#039; hmac (key, message) &amp;#039;&amp;#039;&amp;#039;{&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
     &amp;#039;&amp;#039;&amp;#039;if&amp;#039;&amp;#039;&amp;#039; (length(key) &amp;gt; blocksize) &amp;#039;&amp;#039;&amp;#039;{&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
         key = hash(key) &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;#039;&amp;#039;// keys longer than blocksize are shortened&amp;#039;&amp;#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;#039;&amp;#039;&amp;#039;}&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
     &amp;#039;&amp;#039;&amp;#039;if&amp;#039;&amp;#039;&amp;#039; (length(key) &amp;lt; blocksize) &amp;#039;&amp;#039;&amp;#039;{&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
         &amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;&amp;#039;&amp;#039;// keys shorter than blocksize are zero-padded (where &amp;#039;&amp;#039;∥&amp;#039;&amp;#039; is concatenation)&amp;#039;&amp;#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
         key = key ∥ [0x00 * (blocksize - length(key))]&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;&amp;#039;&amp;#039; // Where * is repetition.&amp;#039;&amp;#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;#039;&amp;#039;&amp;#039;}&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
    &lt;br /&gt;
     o_key_pad = [0x5c * blocksize] ⊕ key &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;#039;&amp;#039;// Where blocksize is that of the underlying hash function&amp;#039;&amp;#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
     i_key_pad = [0x36 * blocksize] ⊕ key &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;#039;&amp;#039;// Where ⊕ is exclusive or (XOR)&amp;#039;&amp;#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
     &amp;#039;&amp;#039;&amp;#039;return&amp;#039;&amp;#039;&amp;#039; hash(o_key_pad ∥ hash(i_key_pad ∥ message)) &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;#039;&amp;#039;// Where &amp;#039;&amp;#039;∥&amp;#039;&amp;#039; is concatenation&amp;#039;&amp;#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;}&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==相關條目==&lt;br /&gt;
*[[SHA家族]]&lt;br /&gt;
&lt;br /&gt;
==参考文献==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&lt;br /&gt;
{{密碼學|hash}}&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:HMAC}}&lt;br /&gt;
[[Category:訊息鑑別碼]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Willy1018-bot</name></author>
	</entry>
</feed>