0

我想加密数据并将其写入我的数据库。这工作正常。从数据库中取回数据后,我想解密这些数据,但解密无法正常工作。

我将string“测试”保存在数据库中。加密工作正常,加密string的是

3ac5d5d6beeb44c5a58ac54e7fc0ad07ea3c819ff6489aae16d490667a309751378ae10800c072551e3a97596f3a2ae0

在我运行解密功能后,我得到了这个:

8ea2e28e0086ef2ad22c2d7805a34111

但它应该是“测试”

const crypto = require("crypto");
const algorithm = "aes-256-cbc";
const key = new Buffer("11111111111111111111111111111111");
const iv = new Buffer("12345678");

module.exports = {

//我的加密函数

  encrypt(text) { 
    let ivstring = iv.toString("hex");

    let cipher = crypto.createCipheriv(algorithm, key, ivstring);
    let encrypted = cipher.update(text);
    encrypted = Buffer.concat([encrypted, cipher.final()]);
    //  return { iv: iv.toString("hex"), encryptedData: encrypted.toString("hex") };
    return encrypted.toString("hex");
  },

// 我的解密数据

 decrypt(text) {
   let ivstring = iv.toString("hex");
   let encryptedText = Buffer.from(text, "hex");
    let decipher = crypto.createDecipheriv(algorithm, key, ivstring);
    let decrypted = decipher.update(encryptedText);
    decrypted = Buffer.concat([decrypted, decipher.final()]);
    return decrypted.toString();
  }
};
4

1 回答 1

2

您似乎已经应用了两次加密:

encrypt(encrypt('test')) 
// returns '3ac5d5d6beeb44c5a58ac54e7fc0ad07ea3c819ff6489aae16d490667a309751378ae10800c072551e3a97596f3a2ae0'

所以你可以通过decrypt在密文上调用两次来破译它:

const cipherText = '3ac5d5d6beeb44c5a58ac54e7fc0ad07ea3c819ff6489aae16d490667a309751378ae10800c072551e3a97596f3a2ae0'
decrypt(decrypt(cipherText))
// returns 'test'
于 2019-08-02T08:20:32.830 回答