8

I have a class that encrypts a password with a salted hash.

But If I want to pass a null to the class I get the following error: Cannot implicitly convert type string to byte[]

Here is the class code:

public class MyHash
{
    public static string ComputeHash(string plainText, 
                            string hashAlgorithm, byte[] saltBytes)
    {
        Hash Code
    }
}

When I use the class I get the error: "Cannot implicitly convert type string to byte[]"

//Encrypt Password
byte[] NoHash = null;
byte[] encds = MyHash.ComputeHash(Password, "SHA256", NoHash);
Nikhil Agrawal
  • 47,018
  • 22
  • 121
  • 208
MataHari
  • 318
  • 3
  • 6
  • 15

2 Answers2

15

This is because your 'ComputeHash' method returns a string, and you are trying to assign this return value to a byte array with;

byte[] encds = MyHash.ComputeHash(Password, "SHA256", NoHash);

There is no implicit converstion for string to byte[] because there exist a number of different encodings to represent a string as bytes, such as ASCII or UTF8.

You need to explicitly convert the bytes using an appropriate encoding class like so;

string x = "somestring";
byte[] y = System.Text.Encoding.UTF8.GetBytes(x);
RJ Lohan
  • 6,497
  • 3
  • 34
  • 54
0

The return type of your ComputeHash function is a string. You try to assign the result of your function to encds, which is byte[]. The compiler points this discrepancy out to you, because there is no implicit conversion from string to byte[].

Azeem
  • 11,148
  • 4
  • 27
  • 40
Reinier Torenbeek
  • 16,669
  • 7
  • 46
  • 69