Python hmac and C# hmac

后端 未结 1 1233
情话喂你
情话喂你 2021-01-01 01:05

We have a python web service. It needs a hash as a parameter. The hash in python is generated this way.

    hashed_data = hmac.new(\"ant\", \"bat\", hashlib.         


        
相关标签:
1条回答
  • 2021-01-01 01:45

    In order to print the result:

    • In Python you use: .hexdigest()
    • In C# you use: Convert.ToBase64String

    Those 2 functions don't do the same thing at all. Python's hexdigest simply converts the byte array to a hex string whereas the C# method uses Base64 encoding to convert the byte array. So to get the same output simply define a function:

    public static string ToHexString(byte[] array)
    {
        StringBuilder hex = new StringBuilder(array.Length * 2);
        foreach (byte b in array)
        {
            hex.AppendFormat("{0:x2}", b);
        }
        return hex.ToString();
    }
    

    and then:

    ASCIIEncoding encoder = new ASCIIEncoding();
    Byte[] code = encoder.GetBytes("ant");
    HMACSHA1 hmSha1 = new HMACSHA1(code);
    Byte[] hashMe = encoder.GetBytes("bat");
    Byte[] hmBytes = hmSha1.ComputeHash(hashMe);
    Console.WriteLine(ToHexString(hmBytes));
    

    Now you will get the same output as in Python:

    739ebc1e3600d5be6e9fa875bd0a572d6aee9266
    
    0 讨论(0)
提交回复
热议问题