mbedtls计算MD5哈希值与OpenSSL等工具结果不一致的原因及解决方法
差异原因
你得到的MD5结果和通用工具不一致,核心问题是输入字符串的长度计算错误:
- C语言中使用
unsigned char hash_source[] = "This is a test..";定义字符串数组时,sizeof(hash_source)返回的长度包含了C字符串默认追加的\0空终止符,实际传入哈希计算的输入是17字节,比原始字符串多了末尾的空字符。 - Node.js的
crypto.update、OpenSSL的echo -n逻辑都不会自动在输入末尾加空终止符,计算的是原始16字节的字符串内容,输入内容不同自然得到不同哈希值。
修复方法
只需要将计算输入长度的代码:
size_t hash_source_len = sizeof(hash_source);
替换为:
size_t hash_source_len = strlen((const char*)hash_source);
strlen会统计字符串到\0之前的有效字符长度,不会包含末尾的空终止符,和通用工具的输入逻辑对齐,即可得到一致的MD5结果。
内容的提问来源于stack exchange,提问作者Brainenjii
相关产品推荐
相关产品推荐

