2017-11-15 2 views
1

CryptoJS verschlüsselte Zeichenfolge kann verschiedene Parameter übergeben in Python kann nur eine Zeichenfolge übergeben? Wie implementiert man die zweite CryptoJS-Implementierung in Python , wie clientKey2 zu bekommen, Dies wird nur das erste Ergebnis geben.Danke!CryptoJS HmacSHA256 Verschlüsselungsergebnisse unterscheiden sich von Python

> saltedPassword=CryptoJS.PBKDF2("key", "salt", {keySize: 8,iterations:500,hasher: CryptoJS.algo.SHA256});  
> clientKey1=CryptoJS.HmacSHA256(saltedPassword.toString(), "Client Key") 
> clientKey2=CryptoJS.HmacSHA256(saltedPassword, "Client Key") 
> clientKey1.toString() 
> "857ef8988876a3bb6bcadb85ca257787074e73e830d7dc14c1f838ba46aef1f5" 
> clientKey2.toString() 
> "9a8574da9b276ee1162dcb92071df587f4513bc03060bda1e9b3897d46233416" 
> saltedPassword.toString() 
> "6e441ccd26e6b35198b4b17457dc0266d36b751d0062b5850b0e302ceb1d6dcc" 

ich diese Art und Weise verwenden clientKey1 bekommen können,

import hashlib 
import hmac 

def HmacSHA256(k,v): 
    message = bytes(k).encode('utf-8') 
    secret = bytes(v).encode('utf-8') 
    signature = hmac.new(secret, message, digestmod=hashlib.sha256).hexdigest() 
    return signature 

signature = HmacSHA256("6e441ccd26e6b35198b4b17457dc0266d36b751d0062b5850b0e302ceb1d6dcc","Client Key") 

print signature 

Wie das zweite Ergebnis in Python zu erhalten, Dank!

+0

Willkommen bei SO. Du fragst stark auf Code. Bitte stellen Sie sicher, dass Sie Ihr Problem erklären, bevor Sie einen Code veröffentlichen. Stellen Sie den Code selbst vor und erklären Sie, was er tut. Sie können dann Ihre Frage abschließen, indem Sie am Ende eine spezifische Frage hinzufügen. Lesen Sie auf jeden Fall [diese Seite] (https://stackoverflow.com/help/how-to-ask), um eine gute Frage zu stellen –

Antwort

1

Um die gewünschte clientKey2 zu erhalten, müssen Sie die Hexadezimalziffern Ihrer saltedPassword Zeichenfolge in Bytes codieren. Eine Möglichkeit, das zu tun, was auf Python 2 & Python 3 funktioniert, ist binascii.unhexlify zu verwenden.

Ihre HmacSHA256 Funktion ist ein bisschen seltsam. Es wird nicht mit Python 3 funktionieren, da bytes Objekte keine .encode Methode haben. In Python 2, bytes ist nur ein Synonym für str.

Wie auch immer, hier ist einige Code, 3.

from __future__ import print_function 
import hashlib 
import hmac 
import binascii 

key = "Client Key".encode() 
salted = "6e441ccd26e6b35198b4b17457dc0266d36b751d0062b5850b0e302ceb1d6dcc" 
raw = binascii.unhexlify(salted) 

signature = hmac.new(key, salted.encode(), digestmod=hashlib.sha256).hexdigest() 
print(signature) 

signature = hmac.new(key, raw, digestmod=hashlib.sha256).hexdigest() 
print(signature) 

Ausgang

857ef8988876a3bb6bcadb85ca257787074e73e830d7dc14c1f838ba46aef1f5 
9a8574da9b276ee1162dcb92071df587f4513bc03060bda1e9b3897d46233416 

Der Ausgang ist identisch auf Python 2 & Python 3.

sowohl Python 2 & Python funktioniert

BTW, wäre es einfacher, diese Aufgabe in Python 3 zu tun, die eine saubere distinctio macht n zwischen Text- und Byte-Strings. Auch das Python 3 hashlib Modul hat eine pbkdf2 function.

Verwandte Themen