我需要将此JavaScript代码移植到Python:
var decrypt = function (text, password){
var decipher = crypto.createDecipher('aes-256-cbc',password);
var dec = decipher.update(text,'hex','utf8');
dec += decipher.final('utf8');
return dec;
}
问题是PyCrypto库需要密钥+ IV而不仅仅是密码,而且我不知道如何模仿JavaScript crypto.createDecipher
方法。
非常感谢!
答案 0 :(得分:0)
好的,一个可能的解决方案是使用文件decrypt.js:
var crypto = require('crypto');
var decrypt = function (text, password){
var decipher = crypto.createDecipher('aes-256-cbc',password);
var dec = decipher.update(text,'hex','utf8');
dec += decipher.final('utf8');
return dec;
}
console.log(decrypt(process.argv[2], process.argv[3]));
在你的python文件中只需使用:
def decrypt(text, password):
p = subprocess.Popen(
['nodejs', 'decrypt.js', text, password],
stdout=subprocess.PIPE
)
stdoutdata, stderrdata = p.communicate()
return stdoutdata.decode('utf8')
可能这不是最佳选择,但它确实有效。
答案 1 :(得分:0)
现在我有一个完整的Python 3解决方案:
def decrypt(text, password):
key, iv = _evp_bytes_to_key(password, '', 32, 16)
decipher = AES.new(key, AES.MODE_CBC, iv)
return decipher.decrypt(bytes.fromhex(text.strip())).decode('utf8')
def _evp_bytes_to_key(password, salt, key_len, iv_len):
dtot = hashlib.md5((password + salt).encode()).digest()
d = [dtot]
while len(dtot) < (iv_len + key_len):
d.append(hashlib.md5(d[-1] + (password + salt).encode()).digest())
dtot = dtot + d[-1]
return dtot[:key_len], dtot[key_len:key_len+iv_len]