SHA1 Plain text? C#.NET

a 夏天 提交于 2019-11-28 04:24:19

问题


I am using C# and calculating SHA1 for a string. My question is that will this always produce plain text 0-1 and A-Z ? Or it will produce has with special characters too ? I mean is ComputeHash function here will return always plain text ?

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

Not sure but I think it should generate special character only if its converted to Base 64 .


回答1:


It's a hex string, so only 0-9 and A-F.

Actually it's just a byte array, but you use the string BitConverter.ToString(byte[]) method to turn it into a hex-string in pairs of two separated by a - (dash).

Hexadecimal only contains: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. 16 options, a pair of two of those will represent a single byte (16*16 = 2^8 = 256, is a single byte).




回答2:


The hashing API itself returns a byte[] containing an arbitrary 20 byte sequence.

You need to convert it to string yourself. Using Hex or Base64 as encodings are popular choices.

BitConverter.ToString() converts the string to hex with bytes delimited by -. Since you then remove the -s you end up with a 40 character hex string (0-9, A-F), which is a subset of alphanumeric chars.

So your code will always return an alphanumeric string, even though SHA-1 doesn't.

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


来源:https://stackoverflow.com/questions/5340539/sha1-plain-text-c-net

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!