Utf 8 255中的SHA-1是什么?

Utf 8 255中的SHA-1是什么?,utf-8,sha1,Utf 8,Sha1,假设您有一个sha-1算法,它接受文本作为输入,而不是字节数组。 (例如,有些Javascript库就是这样的) 如果要将sha-1应用于文本(假设文本是密码),则首先进行utf-8编码,因为文本可以包含多字节字符。换句话说,文本中字符的相应整数值可能大于8位字节所能容纳的值。由于sha-1算法工作在8位单元上,因此它有助于首先以utf-8编码文本 我的问题是: 当您有一个非文本二进制数据,其中每个字节的值介于0和255之间时,您是否仍希望在将二进制数据传递给sha-1算法之前对其进行utf-8

假设您有一个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是什么


哪一个是正确的?

不,不要对二进制数据进行UTF-8编码,这没有意义。如果您想要一段二进制数据的散列,您应该准确地使用SHA-1,而不是该数据的一些随机转换


您也不应该对字符串进行UTF-8编码,除非您想要的是该字符串的UTF-8表示形式的SHA-1。

不,不要对二进制数据进行UTF-8编码,这没有意义。如果您想要一段二进制数据的散列,您应该准确地使用SHA-1,而不是该数据的一些随机转换


您也不应该对字符串进行UTF-8编码,除非您想要的是该字符串的UTF-8表示形式的SHA-1。

如果这一点很清楚,为什么我在web上遇到的所有javascript库都首先进行UTF-8编码?看这两个:这是一个“规范化”方法。假设您有两个用户在一条消息中向您发送“hé”。一个用户以ISO-8859-1发送,另一个用户以UTF-16发送。如果要比较的是它们发送给您的字节(第一个2字节,第二个4字节),在散列之前不要对输入进行任何转换。如果要比较的是文本(“人类可理解的”)内容,请选择一种编码,将所有输入编码为“规范”编码,然后比较该公共表示的散列。我的问题是“我们是否对sha1进行规范化”?如果我们不这样做,为什么库要这样做?规范化(通常)是文本数据的一个好主意。但这对于二进制数据来说毫无意义。通过UTF-8编码方案传递二进制文件(您会选择什么作为源代码编码)根本不会使其正常化(它会破坏它)。你似乎认为“127以上”的角色对SHA有特殊的作用——事实并非如此。一个二进制文件的SHA-1是一个单字节,所有位都设置为85e。。。你的另一个总和是某个完全不同的东西的SHA1,它没有任何意义。我理解你的答案,我即将结束这个问题,但是你能告诉我你对为什么javascript SHA1库默认使用utf-8编码的看法吗?请注意,javascript中没有字节数据结构。因此,您必须将二进制数据表示为文本才能将其传递给sha-1 javascript代码,因为字符串是此类库支持作为输入的唯一数据类型。如果这一点很清楚,为什么我在web上遇到的所有javascript库都首先进行UTF-8编码?看这两个:这是一个“规范化”方法。假设您有两个用户在一条消息中向您发送“hé”。一个用户以ISO-8859-1发送,另一个用户以UTF-16发送。如果要比较的是它们发送给您的字节(第一个2字节,第二个4字节),在散列之前不要对输入进行任何转换。如果要比较的是文本(“人类可理解的”)内容,请选择一种编码,将所有输入编码为“规范”编码,然后比较该公共表示的散列。我的问题是“我们是否对sha1进行规范化”?如果我们不这样做,为什么库要这样做?规范化(通常)是文本数据的一个好主意。但这对于二进制数据来说毫无意义。通过UTF-8编码方案传递二进制文件(您会选择什么作为源代码编码)根本不会使其正常化(它会破坏它)。你似乎认为“127以上”的角色对SHA有特殊的作用——事实并非如此。一个二进制文件的SHA-1是一个单字节,所有位都设置为85e。。。你的另一个总和是某个完全不同的东西的SHA1,它没有任何意义。我理解你的答案,我即将结束这个问题,但是你能告诉我你对为什么javascript SHA1库默认使用utf-8编码的看法吗?请注意,javascript中没有字节数据结构。因此,您必须将二进制数据表示为文本才能将其传递给sha-1 javascript代码,因为字符串是此类库支持作为输入的唯一数据类型。
With UTF-8 encoding:    730cf30d408ecf51aad876f5c491f837f7ddea4c

Without UTF-8 encoding: 85e53271e14006f0265921d02d4d736cdc580b0b