【发布时间】:2011-11-11 20:05:57
【问题描述】:
假设您有一个接受文本作为输入而不是字节数组的 sha-1 算法。 (例如有一些类似的 Javascript 库)。
如果您想将 sha-1 应用于文本(假设该文本是密码),那么您首先进行 utf-8 编码,因为该文本可以包含多字节字符。换句话说,文本中一个字符的对应整数值可以大于一个 8 位字节可以容纳的值。由于 sha-1 算法适用于 8 位单元,因此它有助于首先将文本编码为 utf-8。
我的问题是: 当您有一个每个字节的值在 0 到 255 之间的非文本二进制数据时,您是否仍然希望在将二进制数据传递给 sha-1 算法之前对其进行 utf-8 编码?我知道当值在 0 到 127 之间时,utf-8 根本不会修改数据。
但是,如果值介于 128 和 255 之间,则 UTF-8 会修改此类数据。
总之,这是我的问题:包含值 255(全为 1)的字节的 SHA-1 是什么?
With UTF-8 encoding: 730cf30d408ecf51aad876f5c491f837f7ddea4c
Without UTF-8 encoding: 85e53271e14006f0265921d02d4d736cdc580b0b
哪个是正确的?
【问题讨论】: