密码改为key+i的pycrypto-AES

2024-10-01 19:14:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要将这个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库需要一个key+IV而不仅仅是一个密码,而且我不知道如何模仿JavaScript crypto.createDecipher方法。在

非常感谢!在


Tags: 代码textvarupdatefunctionpasswordutf8javascript
2条回答

现在我有了一个完整的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]

好的,一个可能的解决方案是有一个文件解密.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文件中只需使用:

^{pr2}$

也许这不是最好的选择,但它是有效的。在

相关问题 更多 >

    热门问题