我将HMAC-MD5编码的参数传递到表单中,并且供应商将其作为无效返回。但是,它匹配哈希生成器给我的内容,除了字母大小写。我做的就是使用lcase命令。我想知道这会不会给我带来麻烦。 Coldfusion以大写字母生成散列字符串,供应商似乎总是使用小写字母;是它总是一个或另一个或它们会混合在一起吗?
答案 0 :(得分:10)
MD5,因为每个其他哈希函数都会产生二进制输出,对于MD5,它是16字节。
因为这些字节难以处理,所以它们编码为字符串。在MD5的情况下,它们通常被编码为32个小写的十六进制数字,因此每个字节由2个字符表示。
目标系统是接受大写或小写编码还是两者都取决于系统,它与散列函数无关,两者都是同一MD5散列的不同表示。因此,要回答您的问题,请按目标系统的要求格式化输出。
答案 1 :(得分:0)
十六进制字符串可以包含0
- 9
和a
- f
,A
- F
范围内的任何内容,因此您应该预测大写和小写版本。
如果您真的不想尝试在两个高度自以为是的系统之间进行接口,请根据您的要求强制使用大写或小写。
答案 2 :(得分:0)
虽然 RFC-1321 MD5 消息摘要算法没有讨论十六进制字符串编码,但测试套件确实以小写形式显示结果。
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
不可否认,小写字母只是 C/C++ 中 printf()
的产物。