Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"Specified value has invalid Control characters" when converting SHA512 output to string

Tags:

c#

hash

I am attempting to create an Hash for an API. my input is something like this:

FBN|Web|3QTC0001|RS1|260214133217|000000131127897656

And my expected output is like :

17361DU87HT56F0O9967E34FDFFDFG7UO334665324308667FDGJKD66F9888766DFKKJJR466634HH6566734JHJH34766734NMBBN463499876554234343432456

I tried the bellow but I keep getting "Specified value has invalid Control characters. Parameter name: value"

I am actually doing this in a REST service.

public static string GetHash(string text)
{
    string hash = "";
    SHA512 alg = SHA512.Create();
    byte[] result = alg.ComputeHash(Encoding.UTF8.GetBytes(text));
    hash = Encoding.UTF8.GetString(result);        
    return hash;
}

What am I missing?

like image 302
Peter Avatar asked Feb 26 '14 18:02

Peter


1 Answers

The problem is Encoding.UTF8.GetString(result) as the data in result is invalid UTF-8 (it's just binary goo!) so trying to convert it to text is invalid - in general, and specifically for this input - which results in the Exception being thrown.

Instead, convert the byte[] to the hex representation of said byte sequence; don't treat it as UTF-8 encoded text.

See the questions How do you convert Byte Array to Hexadecimal String, and vice versa? and How can I convert a hex string to a byte array?, which discuss several different methods of achieving this task.

like image 147
user2864740 Avatar answered Nov 14 '22 23:11

user2864740