使用Node.js加密模块通过iv用Aes-256-cbc解密密码

时间:2018-09-23 18:43:38

标签: node.js encryption

我正在将python AES-256加密/解密方法移植到与之等效的nodejs。但是在解密密码时,nodejs出现了错误。

crypto.js:267
  this._handle.initiv(cipher, toBuf(key), toBuf(iv));
               ^

Error: Invalid IV length
    at new Decipheriv (crypto.js:267:16)
    at Object.createDecipheriv (crypto.js:627:10)
    at CryptoUtils.AESDecrypt

python加密/解密方法:

def AESEncrypt(key, plaintext):
    plaintext = AESPad(plaintext)
    iv = os.urandom(AES.block_size)
    cipher = AES.new(key, AES.MODE_CBC, iv)
    return iv + cipher.encrypt(plaintext)

def AESDecrypt(key, ciphertext):                        
    iv = ciphertext[:AES.block_size];
    cipher = AES.new(key, AES.MODE_CBC, iv);
    plaintext = cipher.decrypt(ciphertext[AES.block_size:]);
    return AESUnpad(plaintext);

我的nodejs尝试将其转换:

AESEncrypt(key, plaintext) {
    const _plaintext = this.AESPad(plaintext)
    const iv = crypto.randomBytes(AES_BLOCK_SIZE) //synchronous
    const cipher = crypto
      .createCipheriv("aes-256-cbc", key, iv)
      .update(_plaintext)
    return iv + cipher
  }

AESDecrypt(key, ciphertext) {
    const iv = ciphertext.slice(0, 16)
    console.log("iv", iv)
    const plaintext = crypto
      .createDecipheriv("aes-256-cbc", key, iv)
      .update(ciphertext.substring(16))
    return this.AESUnpad(plaintext)

我在做什么错?我的nodejs版本是v8.11.2和Python 2.7.15rc1

0 个答案:

没有答案