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

对称式加密:

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

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

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

1、加密模块的引用:

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

默认加密算法配置项:

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

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

2、配置项初始化:

  1. function MixCrypto(options) {
  2. if (typeof options == 'string')
  3. options = { key: options };
  4.  
  5. options = $.extend({}, DEFAULTS, options);
  6. this.key = options.key;
  7. this.inputEncoding = options.encoding.input;
  8. this.outputEncoding = options.encoding.output;
  9. this.algorithms = options.algorithms;
  10. }

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

3、加密方法代码如下:

  1. MixCrypto.prototype.encrypt = function (plaintext) {
  2. return $.reduce(this.algorithms, function (memo, a) {
  3. var cipher = crypto.createCipher(a, this.key);
  4. return cipher.update(memo, this.inputEncoding, this.outputEncoding)
  5. + cipher.final(this.outputEncoding)
  6. }, plaintext, this);
  7. };

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

4、解密方法代码如下:

  1. MixCrypto.prototype.decrypt = function (crypted) {
  2. try {
  3. return $.reduceRight(this.algorithms, function (memo, a) {
  4. var decipher = crypto.createDecipher(a, this.key);
  5. return decipher.update(memo, this.outputEncoding, this.inputEncoding)
  6. + decipher.final(this.inputEncoding);
  7. }, crypted, this);
  8. } catch (e) {
  9. return;
  10. }
  11. };

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

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

简单的加密解密实例:

  1. var crypto = require('crypto');
  2. //加密
  3. function encrypt(str, secret) {
  4. var cipher = crypto.createCipher('aes192', secret);
  5. var enc = cipher.update(str, 'utf8', 'hex');
  6. enc += cipher.final('hex');
  7. return enc;
  8. }
  9. //解密
  10. function decrypt(str, secret) {
  11. var decipher = crypto.createDecipher('aes192', secret);
  12. var dec = decipher.update(str, 'hex', 'utf8');
  13. dec += decipher.final('utf8');
  14. return dec;
  15. }

NodeJs 中的Crypto 加密模块的更多相关文章

  1. 浅析nodeJS中的Crypto模块,包括hash算法,HMAC算法,加密算法知识,SSL协议

    node.js的crypto在0.8版本,这个模块的主要功能是加密解密. node利用 OpenSSL库(https://www.openssl.org/source/)来实现它的加密技术, 这是因为 ...

  2. 60.浅谈nodejs中的Crypto模块

    转自:https://www.cnblogs.com/c-and-unity/articles/4552059.html node.js的crypto在0.8版本并没有改版多少,这个模块的主要功能是加 ...

  3. nodejs中的Crypto模块

    我是属于实用型的选手,千万别问我过多原理性的东西,我只知道,这个是最好的,我就用它. http://cnodejs.org/topic/504061d7fef591855112bab5

  4. Nodejs进阶:crypto模块中你需要掌握的安全基础

    本文摘录自<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址. 一. 文章概述 互联网时代,网络上的数据量每天都在以惊人的速度增长.同时,各类网络安全问题层出不穷.在信 ...

  5. nodejs中常用加密算法

    在常用的nodejs+express工程中,为了安全在登录及表单传输时,应该都需进行加密传输,目前个人常用到的加密方式有下列几种: 1.Hash算法加密: 创建一个nodejs文件hash.js,输入 ...

  6. nodejs中aes-128-cbc加密和解密

    和java程序进行交互的时候,java那边使用AES 128位填充模式:AES/CBC/PKCS5Padding加密方法,在nodejs中采用对应的aes-128-cbc加密方法就能对应上,因为有使用 ...

  7. NodeJS学习笔记 进阶 (12)Nodejs进阶:crypto模块之理论篇

    个人总结:读完这篇文章需要30分钟,这篇文章讲解了使用Node处理加密算法的基础. 摘选自网络 Nodejs进阶:crypto模块之理论篇 一. 文章概述 互联网时代,网络上的数据量每天都在以惊人的速 ...

  8. 不要在nodejs中阻塞event loop

    目录 简介 event loop和worker pool event loop和worker pool中的queue 阻塞event loop event loop的时间复杂度 Event Loop中 ...

  9. nodejs中获取时间戳、时间差

    Nodejs中获取时间戳的方法有很多种,例如: new Date().getTime() Date.now() process.uptime() process.hrtime() 平时想获取一个时间戳 ...

随机推荐

  1. php中soap的使用实例以及生成WSDL文件,提供自动生成WSDL文件的类库——SoapDiscovery.class.php类

    1. web service普及: Webservice soap wsdl区别之个人见解 Web Service实现业务诉求:  Web Service是真正“办事”的那个,提供一种办事接口的统称. ...

  2. linux内核神级list

    源码: #ifndef _LINUX_LIST_H #define _LINUX_LIST_H /* * Simple doubly linked list implementation. * * S ...

  3. Run Configuration error:broken configuration due to unavailable

    希望大家一起来,毕竟大家都不会使用这个Androidstudio,一起扩展这方面的知识量 http://forums.opengamma.com/t/intellij-code-compiles-bu ...

  4. [ActionScript 3.0] AS3 绘制正二十面体(线条)

    分析: 正二十面体共有12个顶点.30条棱,其20个面都是正三角形.每条棱所对应的弧度值为1.1071487177940904弧度,这个弧度值可通过求Math.sqrt(5)/5的反余弦值求得.正二十 ...

  5. (medium)LeetCode 229.Majority Element II

    Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The algorit ...

  6. android 资源文件

    系统文档:http://developer.android.com/guide/topics/resources/available-resources.html 1. 系统下资源文件夹的名字是固定的 ...

  7. eclipse打jar包步骤

    eclipse->文件->export->java->JAR file 选择项目,Options增加Add directory entries finish hadoop ja ...

  8. OC基础(22)

    NSMutableString基本概念 NSMutableString常用方法 NSMutableString练习 *:first-child { margin-top: 0 !important; ...

  9. android menu 开发

    menu 分类: 选项菜单(OptionsMenu) 上下文菜单(ContextMenu) 子菜单(SubMenu) 弹出菜单(Popup)   首先说 选项菜单(OptionsMenu) 一.方法介 ...

  10. android NDk环境编译总结

    首先,这篇文章的撰写是基于很多前人的优秀的帖子,感谢他们的分享让我能够学习这么多的知识.谢谢 Android NDK开发环境的搭建 前言: Android 上,应用程序的开发,大部分基于 Java 语 ...