Python hmac und C # hmac

Wir haben einen Python-Web-Service. Es braucht einen Hash als Parameter. Der Hash in Python wird auf diese Weise erzeugt.

hashed_data = hmac.new("ant", "bat", hashlib.sha1) print hashed_data.hexdigest() 

Nun, das ist, wie ich den Hash aus C # generiere.

  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(Convert.ToBase64String(hmBytes)); 

Allerdings komme ich mit unterschiedlichem Ergebnis heraus.

Soll ich die Reihenfolge des Hashings ändern?

Vielen Dank,

Jon

One Solution collect form web for “Python hmac und C # hmac”

Um das Ergebnis zu drucken:

  • In Python verwenden Sie: .hexdigest()
  • In C # verwenden Sie: Convert.ToBase64String

Diese 2 Funktionen machen das nicht gleich. Pythons Hexdigest konvertiert einfach das Byte-Array in einen Hex-String, während die C # -Methode Base64-Codierung verwendet, um das Byte-Array zu konvertieren. Um die gleiche Ausgabe zu erhalten, definieren Sie einfach eine Funktion:

 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(); } 

und dann:

 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)); 

Jetzt bekommst du die gleiche Ausgabe wie in Python:

 739ebc1e3600d5be6e9fa875bd0a572d6aee9266 
Python ist die beste Programmiersprache der Welt.