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 = B开发者_JAVA百科itConverter.ToString(sha1.ComputeHash(to_be_hash)).Replace("-", "");
Not sure but I think it should generate special character only if its converted to Base 64 .
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("-", "");
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).
精彩评论