2014-06-18 85 views
0

我使用$ .ajax方法從前端發送證書,並使用crypto.js加密證書。python中的AES解密

JavaScript代碼

var encrypted = CryptoJS.AES.encrypt("Message", "This is a key123", { mode: CryptoJS.mode.CFB}); 

$.ajax({ 
     type: "POST", 
     url: $SCRIPT_ROOT + "/test", 
     contentType: "application/json", 
     data:JSON.stringify({key:encrypted.toString()}), 
     dataType: "json", 
     success: function (response) { 
      alert(response); 
     } 
    }); 

相同憑證我想在後端側這是在python燒瓶解密。

Python代碼

data = request.json 
key = data["key"] 
obj2 = AES.new('This is a key123', AES.MODE_CFB) 
s = obj2.decrypt(key) 
print s 

我用同樣的模式,同時加密和解密,但打印■將打印波紋管串。

�Qg%��qNˮ�Ŵ�M��ĦP� 
        "~�JB���w���#]�v?W 

任何人都可以建議我更好的方式做加密解密在前端& &後端?

我試圖相同的加密,解密只蟒蛇,

>>> from Crypto.Cipher import AES 
>>> obj = AES.new('This is a key123', AES.MODE_CFB) 
>>> message = "The answer is no" 
>>> ciphertext = obj.encrypt(message) 
>>> ciphertext 
'\x1f\x99%8\xa8\x197%\x89U\xb6\xa5\xb6C\xe0\x88' 
>>> obj2 = AES.new('This is a key123', AES.MODE_CFB) 
>>> obj2.decrypt(ciphertext) 
'The answer is no' 

其工作正常,但我想使用JavaScript在前端數據進行加密,我想在Python中使用相同的解密技術。

+0

'encrypted.toString()'是將密文轉換爲字符串的不好方法。使用Base64或HEX文本表示,並相應地將其轉換爲JS和Python代碼。 –

+0

@OlegEstekhin你能告訴我任何工作的例子嗎? – Jaydipsinh

+0

@OlegEstekhin我已經更新了我的問題。 – Jaydipsinh

回答

0

您傳遞給CryptoJS.AES.encrypt的字符串不是作爲Python代碼可能直接用作鍵(在utf8編碼之後),而是用作密碼以某種方式派生鍵。請參閱:https://code.google.com/p/crypto-js/#The_Cipher_Input

此外,輸出也被編碼爲可打印字符的字符串,並不代表Python代碼需要的原始字節串。參見:https://code.google.com/p/crypto-js/#The_Cipher_Output

+0

我讀了文檔,但我不怎麼在JavaScript和python方面使用它。你能否就此建議我好文章或工作示例? – Jaydipsinh

+0

請檢查更新後的問題 – Jaydipsinh

+0

在更大的範圍內,您嘗試解決什麼問題?這聽起來像通過https檢索和發佈所有數據將滿足您的機密性要求,並修復我假設您的其他一些安全問題。 @Jaydipsinh – Perseids