如何在Python中加密并在Javascript中解密?

时间:2015-10-28 12:23:30

标签: javascript python node.js encryption aes

我可以使用Python或JavaScript加密/解密,但将Python生成的加密数据传递给我的JavaScript代码失败。

base64编码/解码适用于各种语言,因此Python上的基本编码和JavaScript上的解码会检索原始加密字符串。

在测试函数之外,我没有使用Python解密或JavaScript加密,但它们在这里是为了完整性,因为有些读者错过了文字说它们存在。

在Python 2中:

import base64
from pyaes import AESModeOfOperationCTR
SECRET_KEY = "This_key_for_demo_purposes_only!"

def encrypt(raw_data, key=SECRET_KEY):
    aes = AESModeOfOperationCTR(key)
    encrypted_data = aes.encrypt(raw_data)
    base64_encrypted_data = base64.b64encode(encrypted_data)
    return base64_encrypted_data

def decrypt(base64_encrypted_data, key=SECRET_KEY):
encrypted_data = base64.b64decode(base64_encrypted_data)
aes = AESModeOfOperationCTR(key)
decrypted = aes.decrypt(encrypted_data)
return decrypted

在Javascript(运行服务器端,在Parse.com Cloud Code上):

var Buffer = require('buffer').Buffer;
var Crypto = require('crypto');

encrypt: function(raw) {
    var cryptoAlgorithm = "aes-256-ctr";
    var key = "This_key_for_demo_purposes_only!"
    var cipher = Crypto.createCipher(cryptoAlgorithm, key);

    var encrypted = cipher.update(raw, 'utf8', 'binary');
    encrypted += cipher.final('binary');

    var base = toBase64(encrypted);
    return base;
},

decrypt: function(base64raw) {
    var raw = fromBase64(base64raw);

    var cryptoAlgorithm = "aes-256-ctr";
    var key = "This_key_for_demo_purposes_only!"
    var decipher = Crypto.createDecipher(cryptoAlgorithm, key);

    var decrypted = decipher.update(raw, 'binary', 'utf8');
    decrypted += decipher.final('utf8');
    return decrypted;
}

JavaScript函数decrypt()的输出是无意义的。 不匹配在哪里?

给定相同的原始字符串时,两个加密函数的输出不匹配。

我的猜测:在JavaScript中我不应该使用'二进制'。如果为从Python端生成的数据指定decrypt(),则JavaScript 'hex'函数会阻塞。

0 个答案:

没有答案