如何解决解密文件使用 aes-256-cbc node.js iv undefind
我的密钥:crypto.createHash('sha256').update('mySup3rC00lP4ssWord').digest()
我的四:crypto.randomBytes(16)
我尝试此页面中的方法:https://medium.com/@brandonstilson/lets-encrypt-files-with-node-85037bea8c0e
我使用 aes-256-cbc 解密一个 enc 文件,这是我的加密,文件路径是我的位置
C:\Users\芊翅\AppData\Roaming\vue-electron
function fileRead () {
const AppendInitVect = require('../utils/appendInitVect') // 修改數據
const path = app.getPath('userData') // appData的位址
const cipher = crypto.createCipheriv('aes-256-cbc',Key,initVect)
const appendInitVect = new AppendInitVect(initVect)
const readStream = fs.createReadStream(path + '\\config.json') // 讀檔
const gzipStream = zlib.createGzip() // 壓縮檔案
const writeStream = fs.createWriteStream(path + '\\config.json.enc') // 新檔案
readStream.pipe(gzipStream).pipe(cipher).pipe(appendInitVect).pipe(writeStream) // 壓縮再寫檔
}
这是我的加密文件,看是加密文件! enter image description here
但我的问题开始了...当我解密这个 enc 文件时,它会得到错误 my iv is undefined ,
因为 readIv.on('data',(chunk) => { console.log('data') initVect = chunk // this is not work!!!!initVect is undefiend })
不起作用,所以我的 initVect 无法找到,我该如何修复它?
这是我的解密...
function unFileRead () {
const path = app.getPath('userData') // appData的位址
const readIv = fs.createReadStream(path + '\\config.json.enc',{ end: 15 }) // 創建iv讀取的steam
console.log('decrpt path:',path + '\\config.json.enc')
let initVect
readIv.on('data',(chunk) => {
console.log('data')
initVect = chunk // this is not work!!!!initVect is undefiend
})
console.log('initVect:',initVect)
readIv.on('close',() => {
console.log('hello')
const unzip = zlib.createUnzip()
const readStream = fs.createReadStream(path + '\\config.json.enc',{ start: 16 })
const decipher = crypto.createDecipheriv('aes-256-cbc',initVect)
console.log('decipher:',decipher)
const writeStream = fs.createWriteStream(path + '\\config.json.unenc') // 寫檔
readStream.pipe(decipher).pipe(unzip).pipe(writeStream)
})
}
解决方法
这里要理解的关键是同步和异步代码的区别。 initVect
同步初始化为 undefined
,异步设置。因此,当您尝试在 console.log
和 initVect
回调之外 data
close
时,它仍然是 undefined
,因为该行是同步运行的.
如果您将 console.log('initVect:',initVect)
移到 console.log('hello')
下方,您应该会看到它。
希望有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。