hmac.new python 3.4 mit Dictionary anwenden, Vergleich PHP
Verfasst: Freitag 2. September 2016, 21:39
Hier ist ein Beispiel mit PHP und python 2: http://www.php2python.com/wiki/function.hash-hmac/
Warum ist in PHP das folgende:
[codebox=php file=Unbenannt.php]echo hash_hmac("sha256","a", "1");[/code]
dasselbe wie (nun in python 3.4, bei dem man encode() nicht vergessen darf)
Aber sobald ich in Python nun ein dictionary anstelle eines Strings als data nehme, ist es nicht mehr dasselbe?
Also ich habe nun:
[codebox=php file=Unbenannt.php]
$params['api_key'] = "789";
$params['nonce'] = 555;
echo hash_hmac("sha256",json_encode($params), "1");
[/code]
Aber das ist nicht mehr dasselbe wie:
Das Endergebnis von Python soll dasselbe Ergebnis sein, wie in PHP. Wie erreiche ich das?
Zuerst dachte ich, dass es eventuell an der Reihenfolge liegen kann, mit der json.dumps die dictionary Einträge umpackt. Aber selbst wenn ich dafür sorge, dass in PHP und Python dieselbe Reiehenfolge eingehalten wird, kommt nicht dasselbe Ergebnis raus..
Merkwürdig ist allerdings, dass in PHP immer dasselbe Ergebnis bei rauskommt, während es sich in Python ändert, je nach Reihenfolge der Einträge.
Warum ist in PHP das folgende:
[codebox=php file=Unbenannt.php]echo hash_hmac("sha256","a", "1");[/code]
dasselbe wie (nun in python 3.4, bei dem man encode() nicht vergessen darf)
Code: Alles auswählen
import hmac,hashlib
key='1'
data='a'
print (hmac.new(key.encode(), data.encode(), hashlib.sha256).hexdigest())
Also ich habe nun:
[codebox=php file=Unbenannt.php]
$params['api_key'] = "789";
$params['nonce'] = 555;
echo hash_hmac("sha256",json_encode($params), "1");
[/code]
Aber das ist nicht mehr dasselbe wie:
Code: Alles auswählen
params = {"api_key":"789","nonce":555}
print (hmac.new("1".encode(), json.dumps(params).encode(), hashlib.sha256).hexdigest())
Zuerst dachte ich, dass es eventuell an der Reihenfolge liegen kann, mit der json.dumps die dictionary Einträge umpackt. Aber selbst wenn ich dafür sorge, dass in PHP und Python dieselbe Reiehenfolge eingehalten wird, kommt nicht dasselbe Ergebnis raus..
Merkwürdig ist allerdings, dass in PHP immer dasselbe Ergebnis bei rauskommt, während es sich in Python ändert, je nach Reihenfolge der Einträge.