我正在将一个HMAC-MD5编码的参数传递到表单中,但供应商返回该参数无效。 然而,它与他们的哈希生成器给我的匹配,除了字母大小写不同。 为了解决这个问题,我使用了一个lcase命令。 我想知道这是否会在以后给我带来麻烦。 Coldfusion生成的散列字符串是大写字母,供应商似乎总是使用小写字母; 它始终只有一种或另一种情况吗? 还是它们可能混合使用?
我正在将一个HMAC-MD5编码的参数传递到表单中,但供应商返回该参数无效。 然而,它与他们的哈希生成器给我的匹配,除了字母大小写不同。 为了解决这个问题,我使用了一个lcase命令。 我想知道这是否会在以后给我带来麻烦。 Coldfusion生成的散列字符串是大写字母,供应商似乎总是使用小写字母; 它始终只有一种或另一种情况吗? 还是它们可能混合使用?
与其他哈希函数一样,MD5也会产生二进制输出,对于MD5来说,它是16个字节。
由于这些字节很难处理,所以它们被编码为字符串。对于MD5,它们通常被编码为32个小写十六进制数字,因此每个字节由2个字符表示。
目标系统是否接受大写或小写编码或两者都可以,取决于系统,这与哈希函数无关,两者都是相同MD5哈希的不同表示形式。因此,要回答您的问题,请根据目标系统所需的格式设置输出。
虽然 RFC-1321 MD5 Message-Digest Algorithm 没有讨论十六进制字符串编码,但测试套件确实以小写字母显示结果。
The MD5 test suite (driver option "-x") should print the following results:
MD5 test suite:
MD5 ("") = d41d8cd98f00b204e9800998ecf8427e
MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661
MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72
MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0
MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b
MD5 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") =
d174ab98d277d9f5a5611c2c9f419d9f
MD5 ("123456789012345678901234567890123456789012345678901234567890123456
78901234567890") = 57edf4a22be3c955ac49da2e2107b67a
printf()
格式说明符%02x
的输出结果,而不是必须的:"应该打印",而不是"必须打印"。0
到 9
和 a
到 f
,A
到 F
范围内的任何字符,所以你应该预期到有大写和小写两种版本。
lCase()
是完全安全的。 - Alex