网络传输中 XML 敏感信息的加密
2010-10-22 17:18:25 来源:WEB开发网这里简单对 HMAC 的计算做简单的介绍。计算 HMAC 需要一个散列函数 hash(这里采用 MD5)和一个密钥 key( 这里采用随机字符串 SessionID)。用 L 表示 hash 函数的输出字符串长(MD5 是 16 字节),用 B 表示数据块的长度(使用 MD5 分割的数据块长度是 64 字节)。密钥 key 的长度应该小于等于数据块长度 B,如果大于 数据块长度,可以使用 hash 函数对 key 进行转换,结果是一个长度为 L 的 key,这样就满足了长度小于等于数据块长度 B 的条件。计算过程如 清单 6所示。
清单 6. 用户密码的 HMAC 值计算
// 计算过程中需要如下两个长度为 B 的不同字符串:
o_key_pad = [0x5c * B] ⊕ key // ⊕ 为异或操作
i_key_pad = [0x36 * B] ⊕ key
password( 即用户密码 ) 的 HMAC 值等于该表达式的值:hash(o_key_pad, hash(i_key_pad , password));
这样,对得到的 password 的 HMAC 值转换成十六进制字符串形式就可以作为我们 AES 加密算法的密钥了。
Step 1.3. AES 加密和数据的十六进制字符串形式转换
把上个步骤中,由 password HMAC 值转换得到的十六进制字符串作为 AES 的密钥,调用标准的 AES 实现算法即可得到加密后的二进制数据。为了便于二进制形 式的数据便于通过 XML 等格式进行网络传输,我们把把加密后的二进制数据也转换到十六进制的字符串形式。转换到十六进制字符串的示例如 清单 7所示。
清单 7. 数据的十六进制字符串转换
加密后文件的十六进制表示 :
1234567890abcdef
转换后的十六进制字符串形式
31323334353637383930616263646566
password 的值"PASSWORD"经过 Pack、AES 加密之后,转换为十六进制字符串形式为
78DFC347E201F24742030E4E03B8A034C83A4F072EA78DF6C63A9AF8DF06
E57D42D73DC00D3A01773D1AB8A9DBCE759CACC324BD23D141A0CE4F68
FAE6332970FD272250014A1C1CC82EB1637487A430
更多精彩
赞助商链接