微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

解密文件使用 aes-256-cbc node.js iv undefind

如何解决解密文件使用 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.loginitVect 回调之外 data close 时,它仍然是 undefined,因为该行是同步运行的.

如果您将 console.log('initVect:',initVect) 移到 console.log('hello') 下方,您应该会看到它。

希望有所帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。