Question

in c#

public static string HashToString(string message, byte[] key)

{

  byte[] b=new HMACSHA512(key).ComputeHash(Encoding.UTF8.GetBytes(message));

  return Convert.ToBase64String(b);

}

client.DefaultRequestHeaders.Add("X-Hash", hash);

var encryptedContent = DataMotion.Security.Encrypt(key, Convert.FromBase64String(iv), serializedModel);

var request = client.PostAsync(ApiUrlTextBox.Text,encryptedContent,new JsonMediaTypeFormatter());

in java:

protected String hashToString(String serializedModel, byte[] key) {

String result = null;

Mac sha512_HMAC;

try {

  sha512_HMAC = Mac.getInstance("HmacSHA512");      

  SecretKeySpec secretkey = new SecretKeySpec(key, "HmacSHA512");

  sha512_HMAC.init(secretkey);

   byte[] mac_data = sha512_HMAC.doFinal(serializedModel.getBytes("UTF-8"));        

   result = Base64.encodeBase64String(mac_data);

}catch(Exception e){
}
}

o/p: ye+AZPqaKrU14pui4U5gBCiAbegNvLVjzVdGK3rwG9QVzqKfIgyWBDTncORkNND3DA8jPba5xmC7B5OUwZEKlQ==

i have written hashtostring method in java based on c# code. is this currect? (output is different because every time process is dynamic in both cases.)

Was it helpful?

Solution 2

Both java and C# code are giving same result(same hash code). You should check again.

Replace following line in java code at end

result = Base64.getEncoder().encodeToString(mac_data);

OTHER TIPS

With different C# encoding

public static string SHA512_ComputeHash(string text, string secretKey)
{
    var hash = new StringBuilder(); ;
    byte[] secretkeyBytes = Encoding.UTF8.GetBytes(secretKey);
    byte[] inputBytes = Encoding.UTF8.GetBytes(text);
    using (var hmac = new HMACSHA512(secretkeyBytes))
    {
        byte[] hashValue = hmac.ComputeHash(inputBytes);
        foreach (var theByte in hashValue)
        {
            hash.Append(theByte.ToString("x2"));
        }
    }

    return hash.ToString();
}

In c#

public static string HMACSHA512(this string Key, string TextToHash)
        {
            string HmacHashed = "";
            if (string.IsNullOrEmpty(Key))
                throw new ArgumentNullException("HMACSHA512: Key", "Parameter cannot be empty.");
            if (string.IsNullOrEmpty(TextToHash))
                throw new ArgumentNullException("HMACSHA512: TextToHash", "Parameter cannot be empty.");
            if (Key.Length % 2 != 0 || Key.Trim().Length < 2)
            {
                throw new ArgumentNullException("HMACSHA512: Key", "Parameter cannot be odd or less than 2 characters.");
            }
            try
            {
                using (var HMACSHA512 = new HMACSHA512(Encoding.ASCII.GetBytes(Key)))
                {
                    HmacHashed = BitConverter.ToString(HMACSHA512.ComputeHash(Encoding.ASCII.GetBytes(TextToHash))).Replace("-", string.Empty);
                }
                return HmacHashed;
            }
            catch (Exception ex)
            {
                throw new Exception("HMACSHA512: " + ex.Message);
            }
        }
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top