使用加密生成iv时获得相同的iv

时间:2019-06-30 10:04:57

标签: javascript cryptography

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

我尝试浏览网络,但未找到任何相关信息。我也尝试过将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)随机获取一个。

2 个答案:

答案 0 :(得分:0)

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

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

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'centos/7' could not be found. Attempting to find and install...
    default: Box Provider: virtualbox
    default: Box Version: >= 0
==> default: Loading metadata for box 'centos/7'
    default: URL: https://vagrantcloud.com/centos/7
==> default: Adding box 'centos/7' (v1902.01) for provider: virtualbox
    default: Downloading: https://vagrantcloud.com/centos/boxes/7/versions/1902.01/providers/virtualbox.box
    default: Download redirected to host: cloud.centos.org
==> default: Successfully added box 'centos/7' (v1902.01) for 'virtualbox'!

答案 1 :(得分:-1)

我只需要做

const iv = Buffer.alloc(16, 2)