nodejs 对文件进行 压缩加密和解压缩解密

原创 2016年10月26日 17:31:00

utils.js

var fs = require('fs');
var zlib = require('zlib');
var crypto = require('crypto');


function geFileList(path) {
    var filesList = [];
    readFile(path, filesList);
    return filesList;
}

function readFile(path, filesList) {
    files = fs.readdirSync(path);
    files.forEach(walk);
    function walk(file) {
        states = fs.statSync(path + '/' + file);
        if (states.isDirectory()) {
            readFile(path + '/' + file, filesList);
        }
        else {
            var obj = new Object();
            obj.size = states.size;
            obj.name = file;
            obj.path = path + '/' + file;
            filesList.push(obj);
        }
    }
}

var getFileName = function (path) {
    var pathList = path.split("/");
    var fileName = pathList[pathList.length - 1];
    return fileName;
};


var getFileContent = function (filePath, cb) {
    fs.readFile(filePath, function (err, buf) {
        cb(err, buf);
    });
};

var writeFileSync = function (filePath, text) {
    fs.writeFileSync(filePath, text);
};

var writeFileAsync = function (filePath, text, cb) {
    fs.writeFile(filePath, text, function (err) {
        cb(err);
    });
};

/********************加密解密部分**************************/

var consts = {
    cryptkey: 'S62rgt9rf!nYS5b3',
    iv: "Og'Y6Jm-'i#io9Op"
};

function util (){

}
var prot = util.prototype;

prot.md5 = function (str) {
    var md5sum = crypto.createHash('md5');
    md5sum.update(str);
    str = md5sum.digest('hex');
    return str;
};

prot.encode = function (content) {
    var cipher = crypto.createCipheriv('aes-128-cbc', consts.cryptkey, consts.iv);
    cipher.setAutoPadding(true);
    var bf = [];
    bf.push(cipher.update(content));
    bf.push(cipher.final());
    return Buffer.concat(bf);
};


prot.decode = function (content) {
    var decipher = crypto.createDecipheriv('aes-128-cbc', consts.cryptkey, consts.iv);
    decipher.setAutoPadding(true);
    try {
        var a = [];
        a.push(decipher.update(content));
        a.push(decipher.final());
        return Buffer.concat(a);
    } catch (e) {
        console.error('decode error:', e.message);
        return null;
    }
};


/**********************压缩解压缩部分************************/
function gZip(strText, cb) {
    zlib.gzip(strText, function (err, bufData) {
        cb(err, bufData);
    });
}

function unZip(buffer, cb) {
    zlib.unzip(buffer, function (err, buf) {
        cb(err, buf);
    });
}



module.exports = {
    "FileUtil": {
        "getDirFiles": geFileList,
        "getFileName": getFileName,
        "writeFileAsync": writeFileAsync,
        "writeFileSync": writeFileSync,
        "getFileContent": getFileContent
    },
    "EncodeUtil":util,
    "ZipUtil": {
        "gZip": gZip,
        "unZip": unZip
    }
};

demo.js

var utils = require('./utils');
var async = require('async');

var encodeUtil = new utils.EncodeUtil();


zipEncode();


function zipEncode() {
    var fileList = utils.FileUtil.getDirFiles(__dirname + "/jsonFile");
    async.each(fileList, function (item, callback) {
        var filepath = item.path;
        var filename = utils.FileUtil.getFileName(filepath);
        utils.FileUtil.getFileContent(filepath, function (err, buf) {
            if (!err) {
                var bpstr = new Buffer(buf);
                utils.ZipUtil.gZip(bpstr, function (err, bufData) {
                    var encodeBuffer = encodeUtil.encode(bufData);//fs.readFileSync(curPath)
                    var resultPath = __dirname + "/resFile/" + filename;

                    utils.FileUtil.writeFileSync(resultPath, encodeBuffer);
                    callback(err);
                });
            } else {
                callback(err);
            }
        });
    }, function (err, resp) {
        if (err) {
            console.log("err :", err);
        } else {
            console.log("success");
            decodeUnzip();
        }
    });
}

function decodeUnzip() {
    var fileList = utils.FileUtil.getDirFiles(__dirname + "/resFile");
    async.each(fileList, function (item, callback) {
        var filepath = item.path;
        utils.FileUtil.getFileContent(filepath, function (err, buf) {
            if (!err) {
                var bpstr = new Buffer(buf);
                var decodeBuffer = encodeUtil.decode(bpstr);
                utils.ZipUtil.unZip(decodeBuffer, function (err, buf) {
                    console.log(JSON.parse(buf.toString()));
                    callback(err);
                });
            } else {
                callback(err);
            }
        });
    }, function (err, resp) {
        if (err) {
            console.log("err :", err);
        } else {
            console.log("success");
        }
    });
}







版权声明:技术博客自由转载,自由使用。

NodeJS 不可逆加密与密码密文保存

在应用中,常常有要将用户的密码加密储存的需要。以明文保存密码有个缺点:一旦泄漏时容易造成极大的损失,可能会连带其他网站的用户、密码也造成损失(因为大多数用户在多数网站使用相同的账号与密码)。这个泄漏可...
  • zccz14
  • zccz14
  • 2016年06月07日 03:16
  • 2328

nodejs 中压缩/解压方案

项目里要用到archive和unarchive整个已存在的folder,在找解决方案的时候尝试了一些当前比较流行的library,主要有adm-zip, JSZip, archiver等。 假设要压...
  • u010403387
  • u010403387
  • 2015年06月15日 10:09
  • 2979

zip压缩工具jszip--nodejs常用模块(8)

简单介绍 最近写个工具,需要将一些文件压缩到zip包里。使用nodejs调用机器上的zip命令也可以,但对机器就会有要求,需要安装zip命令。当npm上找了下,jszip和adm-zip,这两个...
  • larrywangsun
  • larrywangsun
  • 2014年06月08日 13:05
  • 6937

NodeJS学习系列课程笔记(NodeJs zlib库文件解压缩的相关使用方法)

文件的压缩和解压,是一个很常见的功能,最近做项目用到这个功能点,于是拿出来分享一下。简单起见,我们看一下代码操作:文件压缩/** * Created by Richard on 7/14/16. ...
  • jiangbo_phd
  • jiangbo_phd
  • 2016年07月14日 14:37
  • 2887

nodejs 压缩和解压

var zlib = require('zlib'); var async = require('async'); function gzip(text){ var buf = new Bu...
  • dai_jing
  • dai_jing
  • 2015年08月04日 11:09
  • 4007

koa使用之node.js 文件加密与解密

node.js 利用crypto模块实现加密解密
  • zhangfei8625
  • zhangfei8625
  • 2015年09月17日 10:15
  • 948

Node.js加密算法库Crypto

从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发。Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎。chrome浏...
  • kuangruike
  • kuangruike
  • 2016年09月26日 17:09
  • 2067

关于nodejs中密码加密的处理

一、关于node加密模块crypto的介绍 其实就是使用MD5加密的,不太安全,在实际开发中根据自己的方案进行加盐处理 二、在路由视图中使用加密方式 1、导入node自带的加密模块(不需要安装)/...
  • kuangshp128
  • kuangshp128
  • 2017年07月15日 14:49
  • 1910

nodejs中的加密模块 crypto 模块

nodejs中的加密模块 crypto 模块
  • leekwen
  • leekwen
  • 2016年03月10日 11:14
  • 2343

nodejs 压缩文件 archiver

如下代码实现 压缩a文件夹中的所有内容,生成a.zip 文件 cwd:需要压缩源文件的路径 src:需要压缩的文件 ** 是全部文件 dest 是解压后的层级,如果不设置会使用src的全部层级 ...
  • ISaiSai
  • ISaiSai
  • 2016年04月27日 16:45
  • 2325
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:nodejs 对文件进行 压缩加密和解压缩解密
举报原因:
原因补充:

(最多只允许输入30个字)