假设您有一个sha-1算法,它接受文本作为输入而不是字节数组.(例如,有一些像这样的Javascript库).
如果要将sha-1应用于文本(假设文本是密码),则首先执行utf-8编码,因为文本可以包含多字节字符.换句话说,文本中字符的相应整数值可以大于8位字节可以容纳的值.由于sha-1算法适用于8位单元,因此有助于首先在utf-8中对文本进行编码.
我的问题是这样的:当你有一个非文本的二进制数据,其中每个字节的值是0和255之间,你仍然应该做的二进制数据UTF-8编码,你把它传递给了SHA-1算法之前?我知道当值介于0和127之间时,utf-8根本不会修改数据.
但是,如果值介于128和255之间,则UTF-8会修改此类数据.
总之,这是我的问题:包含值255(全1)的字节的SHA-1是什么?
With UTF-8 encoding: 730cf30d408ecf51aad876f5c491f837f7ddea4c
Without UTF-8 encoding: 85e53271e14006f0265921d02d4d736cdc580b0b
Run Code Online (Sandbox Code Playgroud)
哪一个是正确的?
不,不要UTF-8编码二进制数据,这没有任何意义.如果你想要一个二进制数据的哈希值,你应该完全是 SHA-1 ,而不是那些数据的随机变换.
你不应该UTF-8编码字符串,除非你想要的是该字符串的UTF-8表示的SHA-1 .
归档时间: |
|
查看次数: |
326 次 |
最近记录: |