node.js - AES加密后的文件如何部分解密?

 萧士瑋62184 发布于 2022-11-01 23:43

AES加密后的文件如何部分解密?
如果整个文件加解密我知道怎么做。如下所示。但是现在需求是只解密部分的文件。比如1G的文件只解密最后1M。请问怎么做?
加密算法现在用的是AES-256-CTR

var crypto = require('crypto');
var fs = require('fs-extra');
var encrypt = crypto.createCipher('AES-256-CTR', 'segmentfault');
var decrypt = crypto.createDecipher('AES-256-CTR', 'segmentfault');
var encryptName = 'encrypt.txt';
var decryptName = 'decrypt.txt';
fs.createReadStream('decrypt.js').pipe(encrypt).pipe(fs.createWriteStream(encryptName)).on('finish', () => {
    fs.createReadStream(encryptName).pipe(decrypt).pipe(fs.createWriteStream(decryptName));
});
2 个回答
  • 为啥你在加密的时候不分段加密呢……这样解密的时候也就可以分段解密了。

    2022-11-03 12:38 回答
  • 问题解决了。
    使用这个模块https://npm.taobao.org/packag...

    var crypto = require('crypto');
    var fs = require('fs-extra');
    var encryptName = 'encrypt.txt';
    var decryptName = 'decrypt.txt';
    var cryptoAesCtr = require("crypto-aes-ctr");
    var key = new Buffer("8fbf35890fc3e0d5bc615cb091f16e8d40cfe3d4223cd68b11e2e7204d890210", "hex");
    var iv = new Buffer("4395a3ded2f0040835d437cc9fa7a7dc", "hex");
    fs.createReadStream('decrypt.js').pipe(encrypt).pipe(fs.createWriteStream(encryptName)).on('finish', () => {
        //假设跳过3个AES块,每个AES块是16字节
        var aesBlockSize = 16;
        var counter = 3;
        fs.createReadStream(encryptName, {start: aesBlockSize * counter}).pipe(cryptoAesCtr.createStream(key, iv, counter)).pipe(fs.createWriteStream(decryptName));
    });
    2022-11-03 12:39 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有