Javascript 使用crypto生成iv时获得相同的iv
在将数据存储到json文件之前,我使用加密技术对数据进行加密。问题是我只知道如何生成随机iv 我试着在网上找,但什么也没找到。我还尝试将iv存储在json文件中,但它变得不可用 我注释掉了html内容,以便在cmd提示符下使用它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
//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_.."
}