zoukankan      html  css  js  c++  java
  • NodeJs 中的Crypto 加密模块

    加密技术通常分为两大类:“对称式”和“非对称式”。

    对称式加密:

    就是加密和解密使用同一个密钥,通常称之为“Session Key ”这种加密技术在当今被广泛采用,如美国政府所采用的DES加密标准就是一种典型的“对称式”加密法,它的Session Key长度为56bits。
    非对称式加密:

    就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为“公钥”和“私钥”,它们两个必需配对使用,否则不能打开加密文件。

    加密为系统中经常使用的功能,node自带强大的加密功能Crypto,下面通过简单的例子进行练习。

    1、加密模块的引用:

    复制代码
    var crypto=require('crypto');
    var $=require('underscore');
    var DEFAULTS = {
        encoding: {
            input: 'utf8',//输入数据格式为utf8
            output: 'hex' //输出数据格式为hex(二进制)
        },
        algorithms: ['bf', 'blowfish', 'aes-128-cbc'] //使用的加密算法
    };
    复制代码

    默认加密算法配置项:

    输入数据格式为utf8,输出格式为hex,

    算法使用bf,blowfish,aes-128-abc三种加密算法;

    2、配置项初始化:

    复制代码
    function MixCrypto(options) {
        if (typeof options == 'string')
            options = { key: options };
    
        options = $.extend({}, DEFAULTS, options);
        this.key = options.key;
        this.inputEncoding = options.encoding.input;
        this.outputEncoding = options.encoding.output;
        this.algorithms = options.algorithms;
    }
    复制代码

    加密算法可以进行配置,通过配置option进行不同加密算法及编码的使用。

    3、加密方法代码如下: 

    复制代码
    MixCrypto.prototype.encrypt = function (plaintext) {
        return $.reduce(this.algorithms, function (memo, a) {
            var cipher = crypto.createCipher(a, this.key);
            return cipher.update(memo, this.inputEncoding, this.outputEncoding)
                + cipher.final(this.outputEncoding)
        }, plaintext, this);
    };
    复制代码

    使用crypto进行数据的加密处理。

    4、解密方法代码如下:

    复制代码
    MixCrypto.prototype.decrypt = function (crypted) {
        try {
            return $.reduceRight(this.algorithms, function (memo, a) {
                var decipher = crypto.createDecipher(a, this.key);
                return decipher.update(memo, this.outputEncoding, this.inputEncoding)
                    + decipher.final(this.inputEncoding);
            }, crypted, this);
        } catch (e) {
            return;
        }
    };
    复制代码

    使用crypto进行数据的解密处理。

    通过underscore中的reduce、reduceRight方法,进行加密和解密的算法执行。

    简单的加密解密实例:

    var crypto = require('crypto');
    //加密
    function encrypt(str, secret) {
        var cipher = crypto.createCipher('aes192', secret);
        var enc = cipher.update(str, 'utf8', 'hex');
        enc += cipher.final('hex');
        return enc;
    }
    //解密
    function decrypt(str, secret) {
        var decipher = crypto.createDecipher('aes192', secret);
        var dec = decipher.update(str, 'hex', 'utf8');
        dec += decipher.final('utf8');
        return dec;
    }
    
  • 相关阅读:
    php文件
    phpredis 中文手册和redis 教程
    安装PHP扩展-----phpredis
    jquery获得option的值和对option进行操作
    js获取当前日期时间
    设计模式:观察者模式
    jquery将具有相同名称的元素的值提取出来放到一个数组内
    php事件钩子
    Javascript : 数组
    查看Python安装路径
  • 原文地址:https://www.cnblogs.com/yaojaa/p/4871458.html
Copyright © 2011-2022 走看看