在Python和Node之间使用AES加密时的问题

0 投票
1 回答
634 浏览
提问于 2025-04-18 04:04

我想用Python来加密一个字符串(使用aes-128-ecb算法),然后用Node来解密这个字符串。下面是我写的代码,但我不知道为什么它不管用。

PyCrypto库的文档:http://pythonhosted.org//pycrypto/

Node的crypto库文档:http://nodejs.org/api/crypto.html

Python代码

from Crypto.Cipher import AES
import binascii

aes_key = '\x26\x33\x3B\x48\x28\x69\x77\x8C\x14\xA2\xBE\xC1\xD4\xE2\xFD\x14'
aes = AES.new(aes_key)
data = aes.encrypt('testtesttesttest')

print binascii.hexlify(bytearray(data))
# output >> 5cc4711e67703657f0a04d887d7c074e

JS代码

var crypto = require('crypto');

var aes_key = new Buffer('26333B482869778C14A2BEC1D4E2FD14', 'hex');
var data = new Buffer('b4364ee66c808b3b0f24070879a3b224', 'hex');

var aes = crypto.createDecipher('aes-128-ecb', aes_key);
aes.setAutoPadding(false);
var data = Buffer.concat([aes.update(data), aes.final()]);
console.log(data.toString());
// output >> X4b�1�5(��̣F<�f

1 个回答

2

问题在于 createDecipher() 接受的是一个密码,而不是一个密钥。你需要使用 createDecipheriv(),并且可以给 iv 参数传递任何 Buffer,因为在 ecb 模式下这个参数会被忽略。

var DUMMY_IV = new Buffer(0),
    aes_key = new Buffer('26333B482869778C14A2BEC1D4E2FD14', 'hex'),
    aes = crypto.createDecipheriv('aes-128-ecb', aes_key, DUMMY_IV);
aes.setAutoPadding(false);
var data = Buffer.concat([
  aes.update('5cc4711e67703657f0a04d887d7c074e', 'hex'),
  aes.final()
]);
console.log(data.toString());
// outputs: testtesttesttest

撰写回答