【问题标题】:AES - Pycrypto encryption in python with Crypto decryption in node.jsAES - python 中的 Pycrypto 加密和 node.js 中的加密解密
【发布时间】:2015-10-14 22:29:31
【问题描述】:

我查看了AES - Encryption with Crypto (node-js) / decryption with Pycrypto (python) 的帖子,因为我试图完全相反,但我似乎无法做到正确。这是我迄今为止尝试过的......

Python 加密

import base64
from Crypto import Random
from Crypto.Cipher import AES

text_file = open("cryptic.txt", "w")

pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS) 
unpad = lambda s : s[:-ord(s[len(s)-1:])]

plaintxt = 'dolladollabillzz'
iv = Random.new().read( AES.block_size )
print AES.block_size
key = 'totallyasecret!!'
cipher = AES.new(key=key, mode=AES.MODE_CBC, IV=iv)
encrypted = base64.b64encode(iv + cipher.encrypt(plaintxt))

text_file.write(encrypted)
text_file.close()

Node.js 解密

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

var algorithm = 'aes-128-cbc';
var key = new Buffer('totallyasecret!!', 'binary');

var cryptic = fs.readFileSync('./cryptic.txt', 'base64');
var iv = cryptic.slice(0, 16);
var ciphertext = cryptic.slice(16);

var decipher = crypto.createDecipheriv(algorithm, key, iv);
var decrypted = [decipher.update(ciphertext)];
decrypted.push(decipher.final('utf8'));
var finished = Buffer.concat(decrypted).toString('utf8');
console.log(finished);

每次我尝试运行 Node.js 解密时,都会收到错误消息:

Error: error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length

【问题讨论】:

    标签: javascript python node.js cryptography aes


    【解决方案1】:

    由于 IV 是在 Python 中随机生成的,它可以包含任何可能的字节值。其中一些字节值不是有效的 UTF-8 字符(例如,多个字节是一个字符)并且可能导致错误地切掉 IV,从而使实际密文略有偏移。

    由于 AES 是一种分组密码,因此位必须排列好才能正确解密。这应该可以解决它:

    var cryptic = fs.readFileSync('./cryptic.txt', 'utf8');
    cryptic = new Buffer(cryptic, 'base64');
    var iv = cryptic.slice(0, 16);
    var ciphertext = cryptic.slice(16);
    

    这会将二进制字符串更改为完美处理二进制数据的缓冲区。

    【讨论】:

    • 感谢@Artjom 的建议,但我仍然收到相同的“最终块长度错误”错误。我也尝试在 readFileSync 中使用“二进制”,但结果也是一样的。
    • 能否提供密文进行测试?
    • 当然,我完全按照帖子中的方式运行了我的 python 脚本,并得出了结果密文 Ew2rBvVohbJdFp9D3rBmIAGQWekoL3W3JuF6sQc4DRQ=
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多