SHA1纯文本? C#.NET

时间:2011-03-17 14:38:49

标签: c# sha1

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

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

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

2 个答案:

答案 0 :(得分:25)

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

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

BitConverter.ToString()将字符串转换为十六进制,其中字节由-分隔。然后,您移除了-,最后得到一个40个字符的十六进制字符串(0 - 9A - F),这是一个子集字母数字字符。

因此,即使SHA-1没有,您的代码也会始终返回字母数字字符串。

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

答案 1 :(得分:8)

它是一个十六进制字符串,所以只有0-9和A-F。

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

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