Search code examples
c#base64cryptojs

Equivalent of CryptoJS.enc.Base64.parse on C#


I have a javascript backend that use CryptoJS to generate a hash, I need to generate the same hash on C# Client but can't reproduce the same result than javascript.

The backend code are this:

function generateHash (str, cypherkey) {
  return CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(str, CryptoJS.enc.Base64.parse(cypherkey)))
}

console.log(generateHash("testString", "UTI5dVozSmhkSE1zSUhsdmRTZDJaU0JtYjNWdVpDQnBkQ0VnUVhKbElIbHZkU0J5WldGa2VTQjBieUJxYjJsdUlIVnpQeUJxYjJKelFIZGhiR3hoY0c5d0xtTnZiUT09"))

And print: "FwdJUHxt/xSeNxHQFiOhmPDRh73NFfuWK7LG6ssN9k4="

Then when I try to do the same on my C# client with this code:

    public static string generateHash(string str, string cypherkey)
    {
        var keyenc = new System.Text.ASCIIEncoding();
        byte[] keyBytes = keyenc.GetBytes(cypherkey);
        var key = BitConverter.ToString(keyBytes);

        var encoding = new System.Text.ASCIIEncoding();
        byte[] keyByte = encoding.GetBytes(key);
        byte[] messageBytes = encoding.GetBytes(str);
        using (var hmacsha256 = new HMACSHA256(keyByte))
        {
            byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);
            return Convert.ToBase64String(hashmessage);
        }
    }

Print other result: "SiEjJASvYWfO5y+EiSJAqamMcUyBSTDl5Sy1zXl1J/k="

The problem are on the process to convert to Base64 the cypherkey, probably it's wrong.

Anyone know how can solve this?

Greetings and a lot of thanks ^^


Solution

  • I haven't seen the source of CryptoJs so there are assumptions here (from method names, encoding, etc):

    public static string generateHash(string str, string cypherkey)
    {
        // based on CryptoJS.enc.Base64.parse
        byte[] keyBytes = System.Convert.FromBase64String(cypherkey);
    
        using (var hmacsha256 = new HMACSHA256(keyBytes))
        {
            byte[] hashmessage = hmacsha256.ComputeHash(System.Text.Encoding.UTF8.GetBytes(str));
            return Convert.ToBase64String(hashmessage);
        }
    }
    

    Result:

    FwdJUHxt/xSeNxHQFiOhmPDRh73NFfuWK7LG6ssN9k4=

    Hth