NodeJS和Python之间使用AES 128 CBC解密的不同结果

时间:2016-12-04 14:37:36

标签: python node.js encryption aes cbc-mode

目前我尝试重新实现一个用python编写的网络设备协议库。在那种情况下,我将处理加密和加密的字符串。现在,加密工作正常。我得到了与python代码相同的结果,设备也会回复给我。

现在,我目前感到困惑和困惑,相同字符串的解密确实会产生不同的长度。

我写了2个样本:

#!/usr/bin/python

from Crypto.Cipher import AES

key = bytearray([0x09, 0x76, 0x28, 0x34, 0x3f, 0xe9, 0x9e, 0x23, 0x76, 0x5c, 0x15, 0x13, 0xac, 0xcf, 0x8b, 0x02])
iv = bytearray([0x56, 0x2e, 0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28, 0xdd, 0xb3, 0xba, 0x69, 0x5a, 0x2e, 0x6f, 0x58])
enc = bytearray([0x38, 0x31, 0x40, 0x6c, 0x61, 0x43, 0xb2, 0x42, 0x85, 0xf4, 0x00, 0x10, 0x7b, 0x26, 0x13, 0x78, 0x32, 0x5a, 0xc3, 0x6a, 0x1c, 0x26, 0xbc, 0xc2, 0xde, 0x50, 0xdd, 0x38, 0x63, 0xb0, 0xc4, 0x64]);

print str(enc).encode('hex');
aes = AES.new(str(key), AES.MODE_CBC, str(iv));
payload = aes.decrypt(str(enc));
print str(payload).encode('hex');

我得到了结果

3831406c6143b24285f400107b261378325ac36a1c26bcc2de50dd3863b0c464
0200000028a01d795f13946895860a58ccf98047000000000000000000000000

nodeJS中的等效代码

'use strict'

var crypto = require('crypto');

var key = new Array(0x09, 0x76, 0x28, 0x34, 0x3f, 0xe9, 0x9e, 0x23, 0x76, 0x5c, 0x15, 0x13, 0xac, 0xcf, 0x8b, 0x02);
var iv = new Array(0x56, 0x2e, 0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28, 0xdd, 0xb3, 0xba, 0x69, 0x5a, 0x2e, 0x6f, 0x58);
var enc = new Array(0x38, 0x31, 0x40, 0x6c, 0x61, 0x43, 0xb2, 0x42, 0x85, 0xf4, 0x00, 0x10, 0x7b, 0x26, 0x13, 0x78, 0x32, 0x5a, 0xc3, 0x6a, 0x1c, 0x26, 0xbc, 0xc2, 0xde, 0x50, 0xdd, 0x38, 0x63, 0xb0, 0xc4, 0x64);

console.log(new Buffer(enc));
var aes = crypto.createDecipheriv("aes-128-cbc", new Buffer(key), new Buffer(iv));
var payload = aes.update(new Buffer(enc));
console.log(new Buffer(payload));

抛出结果

<Buffer 38 31 40 6c 61 43 b2 42 85 f4 00 10 7b 26 13 78 32 5a c3 6a 1c 26 bc c2 de 50 dd 38 63 b0 c4 64>
<Buffer 02 00 00 00 28 a0 1d 79 5f 13 94 68 95 86 0a 58>

那么,这里有什么不对吗?为什么加密数据中缺少一部分?

0 个答案:

没有答案