Проблемы при использовании шифрования AES между Python и Node
Я хочу зашифровать строку с помощью Python (aes-128-ecb
) и расшифровывает строку с помощью узла. Ниже то, что я написал. Я не знаю, почему это не работает.
Документация PyCrypto lib: http://pythonhosted.org//pycrypto/
Узел crypto lib doc: 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 ответ
Решение
Проблема в том, что createDecipher() принимает пароль, а не ключ. Вам нужно использовать createDecipheriv() и передавать любой буфер для аргумента iv, так как он игнорируется в режиме 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