SHA1纯文本? C#.NET

我正在使用C#并为字符串计算SHA1。 我的问题是,这总是会产生纯文本0-1和AZ吗? 或者它也会产生具有特殊字符的东西? 我的意思是ComputeHash函数在这里会返回纯文本吗?

SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider(); string receivedValue = BitConverter.ToString(sha1.ComputeHash(to_be_hash)).Replace("-", ""); 

不确定,但我认为它应该只有在转换为Base 64时才会生成特殊字符。

它是一个hex字符串,所以只有0-9和AF。

实际上它只是一个字节数组,但你使用string BitConverter.ToString(byte[])方法将它变成一对hex字符串,两对分隔一个 – (破折号)。

hex只包含:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F。16个选项,其中一对将代表单个字节(16 * 16 = 2 ^ 8 = 256,是单字节)。

散列API本身返回一个包含任意20字节序列的byte[]

您需要自己将其转换为字符串。 使用Hex或Base64作为编码是很受欢迎的选择。

BitConverter.ToString()将字符串转换为hex,其字节由-分隔。 因为你删除了-s,你最终会得到一个40个字符的hex字符串( 09AF ),它是字母数字字符的子集。

所以你的代码总是返回一个字母数字字符串,即使SHA-1没有。

 SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider(); byte[] hash = sha1.ComputeHash(to_be_hash) string delimitedHexHash = BitConverter.ToString(hash); string hexHash = delimitedHexHash.Replace("-", "");