Javascript 使用crypto生成iv时获得相同的iv

Javascript 使用crypto生成iv时获得相同的iv,javascript,cryptography,Javascript,Cryptography,在将数据存储到json文件之前,我使用加密技术对数据进行加密。问题是我只知道如何生成随机iv 我试着在网上找,但什么也没找到。我还尝试将iv存储在json文件中,但它变得不可用 我注释掉了html内容,以便在cmd提示符下使用它 //const submit = document.getElementById('submit') //const username = document.getElementById('username') //const password = document.g

在将数据存储到json文件之前,我使用加密技术对数据进行加密。问题是我只知道如何生成随机iv

我试着在网上找,但什么也没找到。我还尝试将iv存储在json文件中,但它变得不可用

我注释掉了html内容,以便在cmd提示符下使用它

//const submit = document.getElementById('submit')
//const username = document.getElementById('username')
//const password = document.getElementById('password')
const crypto = require('crypto')
const fs = require('fs')
const iv = crypto.randomBytes(16)
let key = '3956349e7a64b865ddcb5bac3af67490'

function load(){
  const raw_data = fs.readFileSync('LJib.json')
  const data = JSON.parse(raw_data)
  let decipher = crypto.createDecipheriv('aes-256-cbc', key, iv)
  let decrypted = decipher.update(data, 'hex', 'utf-8')
  decrypted += decipher.final('utf-8')
  return JSON.parse(decrypted)
}

function save(data){
  data = Buffer.from(JSON.stringify(data))
  let cipher = crypto.createCipheriv('aes-256-cbc', key, iv)
  let encrypted = cipher.update(data, 'utf-8', 'hex')
  encrypted += cipher.final('hex')
  encrypted = JSON.stringify(encrypted)
  fs.writeFileSync('LJib.json', encrypted)
}

function main(){
  submit.addEventListener('click', function() {
    var data = load()
    save(data)
  })
}

save({'user' : 'password'})
console.log(load())
实际上,我只需要一种方法来不断地获得相同的iv,而不是使用
crypto.randomBytes(16)
获得一个随机的iv

const iv = Buffer.alloc(16, 2)

通常IVs应该是随机的,而不是恒定的。IVs是公共的,所以您可以并且应该使用加密文本将其明文存储。最好的解决方案是使用标准格式进行加密,如PKCS#7的封装数据,但需要另一个库,如Forge

由于IV通常具有固定长度,您可以在将其存储到文件中之前简单地将加密数据预先附加到IV中,或者将其放入json结构中,如下面的示例所示,然后将结构保存到文件中。请记住,在必须将原始二进制数据转换为“可打印”字符串(例如十六进制字符串、base 64等)之前,不能将其放入json结构中


那有什么用?它如何回答这个问题?不要只是脱口而出代码。解释一下。静脉曲张的存在是有原因的。不要发明你自己的密码。
{ 
   "iv" : "...iv data...",
   "encrypted" : "...encrypted_data_.."
}