MD5哈希值是大写还是小写?

时间:2017-07-17 20:55:34

标签: hash coldfusion

我将HMAC-MD5编码的参数传递到表单中,并且供应商将其作为无效返回。但是,它匹配哈希生成器给我的内容,除了字母大小写。我做的就是使用lcase命令。我想知道这会不会给我带来麻烦。 Coldfusion以大写字母生成散列字符串,供应商似乎总是使用小写字母;是它总是一个或另一个或它们会混合在一起吗?

3 个答案:

答案 0 :(得分:10)

MD5,因为每个其他哈希函数都会产生二进制输出,对于MD5,它是16字节。

因为这些字节难以处理,所以它们编码为字符串。在MD5的情况下,它们通常被编码为32个小写的十六进制数字,因此每个字节由2个字符表示。

目标系统是接受大写或小写编码还是两者都取决于系统,它与散列函数无关,两者都是同一MD5散列的不同表示。因此,要回答您的问题,请按目标系统的要求格式化输出。

答案 1 :(得分:0)

十六进制字符串可以包含0 - 9a - fA - 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() 的产物。

参考:RFC-1321 Appendix A.5 Test suite