2016-07-07 6 views
4

SHA256 und base64 erstellen Java und Validierung dieser Anforderung in Python erstellen. Die Schlüssel, die ich erzeugt sind wirklich ähnlich:Python und Java MAC SHA256 Codierung, die sehr ähnliche KEY

Java:

UjuGTll3GF7H8MHWyJc41NAEcd-OZOeJLT9PiAevcsw 

Python:

UjuGTll3GF7H8MHWyJc41NAEcd+OZOeJLT9PiAevcsw 

Der einzige diference geschieht mit char + und char -. Ich kann den Java-Code nicht ändern, weil ich keinen Zugriff darauf habe, ich weiß nur, dass er javax.crypto.Mac verwendet. Allerdings ist mein Python-Code ist:

import hmac 
import hashlib 
hmac.new(api_secret, url, hashlib.sha256).digest().encode('base64') 

Die Variablen api_secret und url haben den gleichen Eingang in beiden Sprachen (Java und Python)

Was bin ich?

Antwort

1

digest() gibt eine Zeichenfolge zurück, also encode ist nur die standard encode method. Entsprechend der Liste von standard encodings, die base64 als Codierung angibt, wird base64.encodestring verwendet. Das Alphabet, die von dieser Funktion enthält + und /, die die letzten zwei Zeichen im Standard-Base64-Alphabet sind:

>>> base64.encodestring(chr(248)) 
'+A==\n' 

Wenn Sie eine codierte Zeichenfolge mögen, die - und _ statt + und / verwendet, müssen Sie base64.urlsafe_b64encode verwenden:

>>> base64.urlsafe_b64encode(chr(248)) 
'-A==' 

So würden Sie tun müssen, um so etwas wie:

base64.urlsafe_b64encode(hmac.new(api_secret, url, hashlib.sha256).digest()) 

Damit dies jedoch funktioniert, müssen Sie überprüfen, ob der Java-Code auch _ anstelle von /, wie urlsafe_b64encode, produziert.

+0

Es hat funktioniert, danke! –

Verwandte Themen