SHA1纯文本?C#.NET

Pit*_*ger 6 c# sha1

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

SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider();
string receivedValue = BitConverter.ToString(sha1.ComputeHash(to_be_hash)).Replace("-", "");
Run Code Online (Sandbox Code Playgroud)

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

Cod*_*aos 25

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

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

BitConverter.ToString()将字符串转换为十六进制,并用字节分隔-.因为你删除了-s,你最终得到一个40个字符的十六进制字符串(0- 9,A- F),它是字母数字字符的子集.

所以你的代码将始终返回一个字母数字字符串,即使SHA-1没有.

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


Aid*_*api 8

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

实际上它只是一个字节数组,但是你使用这个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,是单字节).