SHA-1和Unicode

SHA-1和Unicode,unicode,character-encoding,hash,sha1,Unicode,Character Encoding,Hash,Sha1,是否为Unicode字符串定义了SHA-1算法的行为?但是,我确实意识到SHA-1本身并不关心字符串的内容, 在我看来,为了通过SHA-1的标准测试,输入字符串应该用UTF-8编码 SHA-1基于字节;它不关心数据的结构。如果给它一组由Unicode字符串组成的字节,就会得到一个结果。请记住,块大小为512位,因此较小的数据量可能会导致安全问题。我也理解这一点。但是如果我尝试用“abc”通过一个测试,然后给它UTF-16编码的“abc”字符串,会怎么样呢?它永远不会通过。这就是问题存在的原因。当

是否为Unicode字符串定义了SHA-1算法的行为?但是,我确实意识到SHA-1本身并不关心字符串的内容,

在我看来,为了通过SHA-1的标准测试,输入字符串应该用UTF-8编码

SHA-1基于字节;它不关心数据的结构。如果给它一组由Unicode字符串组成的字节,就会得到一个结果。请记住,块大小为512位,因此较小的数据量可能会导致安全问题。

我也理解这一点。但是如果我尝试用“abc”通过一个测试,然后给它UTF-16编码的“abc”字符串,会怎么样呢?它永远不会通过。这就是问题存在的原因。当然,这是行不通的。SHA-1比较数据,不考虑结构。你必须将苹果与苹果进行比较。所以,当谈到要放入SHA-1算法中的Unicode字符串时,你会将什么定义为苹果?:)如果将其与相同的Unicode字符串(编码方式相同)进行比较,则哈希值将匹配。如果将其与以其他方式编码的字符串进行比较,则哈希值将不匹配。这就是安全哈希所做的,真的;它们向您显示数据是相同的还是不同的。比较Unicode和UTF-8字符串会产生不同的哈希,因为它们包含不同的数据。这是期望的结果。编码方式无关紧要,只要每次散列时都采用相同的方式。仅包含ASCII字符的UTF-8编码字符串的散列将与等效的纯ASCII字符[]字符串的散列相匹配(与memcmp相同)。否则,您必须在UTF-16、UTF-16LE、UTF-16BE、UCS-4之间进行选择。。。除非您打算共享这些散列,否则我会将字符串保留为默认编码