哈希输出是否默认为十六进制编码

Is hashing output is by-default hex encoded

提问人:RBS 提问时间:7/27/2023 最后编辑:RBS 更新时间:7/27/2023 访问量:47

问:

由于 md5 哈希算法生成 128 位(=16 字节)的字符串长度 & SHA256 哈希算法生成长度为 256 位(=32 字节)的字符串。

bash-3.2$ md5 <<< 'hash'
4e76434eea3c9d9cf9cb10bbf3f4a74b // string with 32 chareacter.
bash-3.2$ 
bash-3.2$ 
bash-3.2$ shasum -a 256 <<< 'hash'
4e5e494fa316ffc82b8252b23524f1433639858267d641c1217059dc4403e045  // string with 64 chareacter.
bash-3.2$ 

基于输出。

MD5 生成 32 个字符的十六进制字符串,SHA256 生成 64 个字符的十六进制字符串。

在这里,我的假设是,哈希输出始终使用十六进制编码进行编码。 对于给定的哈希算法,输出字符串的有效负载大小是其两倍,并且仅包含十六进制编码的允许字符。

我的假设正确吗?

安全 哈希 加密

评论

2赞 Basile Starynkevitch 7/27/2023
哈希是位序列。对于人类消费,更容易将其表示或输出为十六进制数字序列
1赞 President James K. Polk 7/27/2023
我的假设正确吗?哈哈
0赞 Jim Mischel 7/28/2023
哈希通常采用 base64 编码。例如,在 git 中提交哈希。
0赞 RBS 8/4/2023
@PresidentJamesK.Polk,参考给定的例子,为什么 md5 生成 32 个字符的字符串?它应该生成 16 个字节。SHA256 也一样。我在这里误解了什么吗?

答:

0赞 CherryDT 7/27/2023 #1

哈希通常显示为十六进制字符串,并且通常也存储为十六进制字符串,但它也可以简单地作为二进制数据存储在缓冲区中,甚至在内部存储为大整数,因为本质上它只是一个大数字。

当你处理它时,总是检查你使用的库/代码的输出和输入,以确保它们产生/期望相同的格式,否则你需要自己负责编码或解码。