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

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?

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 Convert hex string to byte array, which discuss several different methods of achieving this task.


In order to make this work you need to convert the individual byte elements into a hex representation

var builder = new StringBuilder();
foreach(var b in result) {
  builder.AppendFormat("{0:X2}", b);
}
return builder.ToString();

Need Your Help

r.id not regenerated

android button

I am trying to create a simple button example, but when I add this code:

Outlook PRF settings for TLS encrypted connection

outlook ms-office

We use the PRF file settings to inject email settings into Outlook, but I cannot find which settings to change in the ".prf" file to enable TLS. Any ideas?