首页 > Web开发 > 详细

nodejs向加密文件指定位置插入内容

时间:2020-04-19 19:11:38      阅读:54      评论:0      收藏:0      [点我收藏+]

需求:

  文件加密,将加密密钥之类的东西放在加密文件之前,类似于给文件增加一个头部信息,在解密的时候从文件这个头部信息里拿到这些密钥之类的东西,请求获取解密的code之类的东西,然后解密加密的文件。比如下

技术分享图片

问题:

  不能向文件的指定位置插入内容,如果直接将文件记录指针移动到中间某位置后开始输出,则新输出的内容会覆盖文件中原有的内容,如果需要向指定位置插入内容,程序需要先把插入点后面的内容读入缓冲区,等把需要插入的数据写入文件后,再将缓冲区的内容追加到文件后面。

方案及插入步骤:

  1、创建临时文件,保存被插入文件的插入点后面的内容;

  2、再重新定位到插入点,将需要插入的内容添加到文件后面;

  3、最后将临时文件的内容添加到文件后面。

  下面是一个简单的demo

const crypto = require(crypto)
const fs = require(fs)
const path = require(path)
let key = 54F0853FD5D8D2FD61CE33309B0D0273
let iv = A19820BCE43576DF

function aesEncryptNew (buff, key, iv) {
  let cipher = crypto.createCipheriv(aes-256-cbc, key, iv)
  return cipher.update(buff, ‘‘, hex)
}
function aesDecryptNew (buff, key, iv) {
  let decipher = crypto.createDecipheriv(aes-256-cbc, key, iv)
  return decipher.update(buff, hex)
}

function encryptFile (filepath, filename) {
  let _path = path.join(filepath, filename)
  let buff = fs.readFileSync(_path)
  let buffEnc = aesEncryptNew(buff, key, iv)
  let _newPath = _path + .mc// 创建一个可以写入的流,写入到文件 output.txt 中
  var writerStream = fs.createWriteStream(_newPath)
  // 使用 utf8 编码写入数据
  writerStream.write(key, utf8)
  writerStream.write(Buffer.from(buffEnc, hex), hex)
  // 标记文件末尾
  writerStream.end()
  // 处理流事件 --> data, end, and error
  writerStream.on(finish, function () {
    console.log(写入完成。)
  })
}

function decryptFile (filepath, filename) {
  let _path = path.join(filepath, filename)
  let hexContent = fs.readFileSync(_path)
  let bufferFile = hexContent.slice(32, hexContent.length)
  let deHex = aesDecryptNew(bufferFile, key, iv)
  let _newPath = _path.replace(/.mc/g, ‘‘)
  fs.writeFileSync(_newPath, Buffer.from(deHex, hex))
}

export {
  encryptFile,
  decryptFile
}

  需要注意的是:

  1、先写入标识key,再写入加密内容的地方

  2、文件裁剪,需要使用buffer裁剪的地方

nodejs向加密文件指定位置插入内容

原文:https://www.cnblogs.com/goloving/p/12732749.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!