C# 为什么在创建哈希时要将文本转换为字节

C# 为什么在创建哈希时要将文本转换为字节,c#,hash,cryptography,C#,Hash,Cryptography,有谁能解释一下,为什么99%的时间在创建散列时,会将数据转换为字节[]。我一直在寻找这个问题的答案,但我浏览的所有网站都只是解释如何创建散列 我见过使用流或字符的站点,但99%的示例转换为字节[] 抱歉,如果这看起来像是一个新手问题,但我是一个新手,我很好奇为什么要帮助我更好地理解原因 谢谢 George哈希函数对字节流(或数组)进行操作。这就是它们的定义 但是,在大多数情况下,文本是Unicode的,因此需要先转换为特定的UTF,然后才能使用字节表示。文本不是Unicode。文本使用字符编码(

有谁能解释一下,为什么99%的时间在创建散列时,会将数据转换为字节[]。我一直在寻找这个问题的答案,但我浏览的所有网站都只是解释如何创建散列

我见过使用流或字符的站点,但99%的示例转换为字节[]

抱歉,如果这看起来像是一个新手问题,但我是一个新手,我很好奇为什么要帮助我更好地理解原因

谢谢


George

哈希函数对字节流(或数组)进行操作。这就是它们的定义


但是,在大多数情况下,文本是Unicode的,因此需要先转换为特定的UTF,然后才能使用字节表示。

文本不是Unicode。文本使用字符编码(如UTF-8)编码为字节。我可能会补充一点,声称散列字符串的API很可能会在后台使用UTF-8将字符串编码为字节。我的观点与Python的观点相同:文本(字符)和数据(字节)之间存在语义差异,决不能将它们混在一起。这是正确的——文本和字节之间没有任何关系。它们之间的关系是一种字符编码,如UTF-8。“文本是Unicode”部分有点模糊。你的意思是文本可以包含不能用ASCII表示的字符吗?嗨,谢谢大家的回答,它帮助我更好地理解了。我的意思是,对于绝大多数目的,文本应该用Unicode表示,这意味着一开始没有直接的字节级表示(与ASCII相反,ASCII通常在字符和字节之间没有区别)。因此,首先转换为UTF-(8 | 16 | 32)然后在上面运行哈希函数,因为哈希函数对字节进行操作,Unicode文本在内存中的字节表示不明确。您的意思是,为什么输入是字节数组,或者为什么输出是字节数组?或者两者都是?Hi Syon,输入转换为字节[]就我个人而言,我总是回到源代码,例如,在你最喜欢的搜索引擎中键入SHA-1规范,你会立即被引导到NIST标准。你会发现它是为位和/或字节指定的。这也适用于所有对称分组密码和非对称密码、密钥派生函数等。基本上所有的现代n crypto以字节为单位进行操作。因此,请注意任何未以字节为单位指定的输入/输出;希望API指定使用哪种编码/解码。嗨,owlstead,感谢您提供的信息,希望下面的链接就是您所指的我即将阅读的站点。