假设您有一个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
哪一个是正确的?
答案 0 :(得分:6)
不,不要UTF-8编码二进制数据,这没有任何意义。如果你想要一个二进制数据的哈希,你应该SHA-1 完全相同,而不是那些数据的随机转换。
你不应该UTF-8编码字符串,除非你想要的是该字符串的 UTF-8表示的SHA-1 。