NodeJS有以下4个与公钥加密相关的类。

Cipher: 用于加密数据;

Decipher: 用于解密数据;

Sign: 用于生成签名;

Verify: 用于验证签名;

在使用公钥加密技术时,需要使用公钥及私钥:公钥是用于创建只有私钥的拥有者能够读出的加密数据,以及对私钥的拥有者的签名进行验证;私钥是用于解密数据以及对数据进行签名。

一、加密数据

在crypto模块中,Cipher类用于对数据进行加密操作;我们可以通过如下两种方式创建cipher对象;

1、createCipher方法;

该方法使用指定的算法与密码来创建cipher对象。该方法使用方式如下:crypto.createCipher(params, pasword);

该方法使用两个参数,第一个参数用于指定在加密数据时所使用的算法,比如 'aes-256-cbc'这些等,第二个参数用于指定加密时所使用的密码,该参数值必须为一个二进制格式的字符串或一个Buffer对象。

createCipher 方法返回一个被创建的cipher对象。

2、createCipheriv方法;

该方法使用指定的算法、密码与初始向量、来创建cipher对象,使用方法如下所示:crypto.createCipheriv(params, password, iv);

该方法的第一个参数是在加密数据时所使用的算法,比如 'aes-256-cbc'等等,

第二个参数用于指定加密时所使用的密码,该参数值必须为一个二进制格式的字符串或一个Buffer对象。

第三个参数指定加密时所使用的初始向量,参数值也必须为一个二进制格式的字符串或一个Buffer对象。

该方法返回的也是一个被创建的cipher对象。

3、在上面通过两种方式创建了cipher对象后,可以通过使用该对象的update方法来指定需要被加密的数据,该方法使用的方式如下:cipher.update(data, [input_encoding], [output_encoding])

其中第一个参数为必选项(其他的参数为可选项), 该参数值是一个Buffer对象或一个字符串,用于指定需要加密的数据。

第二个参数用于指定被加密的数据所使用的编码格式,可指定参数值为 'utf-8', 'ascii' 或 'binary',如果不使用第二个参数的话,那么第一个参数必须为一个Buffer对象。

第三个参数用于指定输出加密数据时使用的编码格式,可指定的参数值为 'hex', 'binary' 或 'base64' 等。如果不使用第三个参数的话,该方法就返回了一个存放了加密数据的Buffer对象。

4、可以使用cipher对象的final方法来返回加密数据。

当该方法被调用时,任何cipher对象中所缓存的数据都将被加密。在使用了cipher对象的final方法后,不能再向cipher对象中追加加密数据,该方法使用方式如下:cipher.final([output_encoding]);

该方法使用一个可选参数,该参数值为一个字符串,用于指定在输出加密数据的编码格式,可指定参数值为 'hex', 'binary', 及 'base64',如果使用了该参数,那么final方法返回字符串格式的加密数据,如果不使用该参数,那么该方法就返回一个Buffer对象。

二、解密数据

在crypto模块中,Decipher类用于对加密后的数据进行解密操作。

创建一个decipher对象,可以通过如下两种方式进行创建:

1、createDecipher方法,该方法使用指定的算法与密码来创建 decipher对象,该方法使用的方式如下:crypto.createDecipher(params, password);

在该方法中,第一个参数用于指定在解密数据时所使用的算法,比如 'aes-256-cbc'等,该算法必须与加密数据时所使用的算法保持一致。

第二个参数用于指定解密时所使用的密码,其参数值为一个二进制格式的字符串或一个Buffer对象,该密码同样必须与加密该数据时所使用的密码保持一致。

createDecipher方法返回一个被创建的 decipher对象。

2、createDecipheriv方法;该方法使用指定的算法、密码与初始向量来创建decipher对象。该方法使用如下所示:crypto.createDecipheriv(params, password, iv);

在该方法中,第一个参数用于指定在解密数据时所使用的算法,比如 'aes-256-cbc'等,该算法必须与加密数据时所使用的算法保持一致。

第二个参数用于指定解密时所使用的密码,参数值必须为一个二进制格式的字符串或一个Buffer对象,同样的道理,该密码必须与加密该数据时所使用的密码保持一致。

第三个参数用于指定解密时所使用的初始向量,该参数值也必须为一个二进制格式的字符串或者一个Buffer对象,该初始向量必须与加密该数据时所使用的初始向量保持一致。

3、在创建了decipher对象之后,可以通过使用该对象的update方法来指定需要被解密的数据。该方法使用如下所示:decipher.update(data, [input_encoding], [output_encoding]);

在该方法中,第一个参数为一个Buffer对象或一个字符串,用于指定需要被解密的数据,

第二个参数用于指定被解密数据所使用的编码格式,可指定的参数值为 'hex', 'binary', 'base64'等,如果不使用第二个参数的话,那么参数值必须为一个buffer对象

第三个参数用于指定输出解密数据时使用的编码格式,可选参数值为'utf-8', 'ascii' 或 'binary';

4、可以使用decipher对象的final方法来返回经过解密之后的原始数据,该方法使用如下所示:decipher.final([output_encoding]);

在该对象的final方法中,使用了一个可选参数,参数值为一个字符串,用于指定在输出解密数据时使用的编码格式,可指定参数值为 'utf-8', 'ascii' 或 'binary';

如果使用了 该参数,final返回字符串格式的解密数据,如果不使用该参数,final方法返回一个Buffer对象。

5、如下加密解密数据的代码:

const crypto = require('crypto');/*下面是使用加密算法对 '我很棒' 几个字进行加密,所加密使用的密码是 123456*/

const data = '我很棒';const password = '123456';//创建加密算法

const aseEncode =function(data, password) {//如下方法使用指定的算法与密码来创建cipher对象

const cipher = crypto.createCipher('aes-256-cbc', password);//使用该对象的update方法来指定需要被加密的数据

let crypted = cipher.update(data, 'utf-8', 'hex');

crypted+= cipher.final('hex');returncrypted;

};

console.log(aseEncode(data, password));//输出加密后字符串//创建解密算法

const aseDecode =function(data, password) {/*该方法使用指定的算法与密码来创建 decipher对象, 第一个算法必须与加密数据时所使用的算法保持一致;

第二个参数用于指定解密时所使用的密码,其参数值为一个二进制格式的字符串或一个Buffer对象,该密码同样必须与加密该数据时所使用的密码保持一致*/

const decipher = crypto.createDecipher('aes-256-cbc', password);/*第一个参数为一个Buffer对象或一个字符串,用于指定需要被解密的数据

第二个参数用于指定被解密数据所使用的编码格式,可指定的参数值为 'hex', 'binary', 'base64'等,

第三个参数用于指定输出解密数据时使用的编码格式,可选参数值为 'utf-8', 'ascii' 或 'binary';*/let decrypted= decipher.update(data, 'hex', 'utf-8');

decrypted+= decipher.final('utf-8');returndecrypted;

};

console.log(aseDecode(aseEncode(data, password), password));//输出 我很棒

node 加密解密模块_NodeJS之crypto模块公钥加密及解密相关推荐

  1. nodejs mysql模块_NodeJs使用Mysql模块实现事务处理

    依赖模块: 1. mysql:https://github.com/felixge/node-mysql npm install mysql --save 2. async:https://githu ...

  2. nodejs的mysql模块_Nodejs的mysql模块学习(一)

    介绍 mysql npm包 是一个nodejs的模块,由JavaScript编写 安装 npm install mysql 建立连接 var mysql = require('mysql');//引用 ...

  3. 使用node加密解密数据,创建Hash/HMAC,并生成签名与验证签名

    1.数据加密与解密 主要使用了node的crypto模块的Cipher与Decipher类来加密解密,加密与解密的方法主要有以下几种: 1.1 使用Cipher与Decipher对象作为流来加密解密 ...

  4. php公钥私钥使用,PHP实现公钥加密私钥解密机制

    在接触thinkphp5之后,知道thinkphp5作为API接口性能更加的友好,那么我们在为别人提供接口的时候需要考虑一些安全性问题,这时候我们就需要做一些数据的处理. 下面这是几篇加密的介绍: 加 ...

  5. node 加密解密模块_聊聊Node加密模块crypto加密原理的那些事

    crypto是node.js中实现加密和解密的模块 在node.js中,使用OpenSSL类库作为内部实现加密解密的手段 OpenSSL是一个经过严格测试的可靠的加密与解密算法的实现工具. 散列(哈希 ...

  6. node 加密解密模块_跨语言(java vs python vs nodejs)的RSA加解密问题探讨

    多次被问到这样的问题: java服务端的rsa加密操作已经完成,返回一个16进制的字符串给python平台,但是在python进行私钥解密的时候发现行不通.... 前端python加密,后端用java ...

  7. Python crypto模块实现RSA和AES加密解密

    Python crypto模块实现RSA和AES加密解密 Python的crypto是用于RSA加密解密,AES加密解密的. 一.RSA和AES简介 RSA加密算法是一种非对称加密算法.RSA 是19 ...

  8. 使用 crypto 模块进行加密和解密

    crypto 1 哈希算法 hash 2 对称加密 AES crypto模块的主要功能有 哈希算法.对称加密以及非对称加密. 1 哈希算法 hash hash 通常给数据签名,它是一种不可逆的加密算法 ...

  9. Node.js crypto模块

    The crypto module provides cryptographic functionality that includes a set of wrappers for OpenSSL's ...

最新文章

  1. 腾讯云年度最强技术大会召开在即,这次只谈技术和代码
  2. jsx怎么往js里传参数_实践Vue 3.0做JSX(TSX)风格的组件开发
  3. Win10 配置 TensorFlow-gpu 深度学系框架
  4. java8 lambda判断_Java8新特性-Lambda表达式
  5. python类汇总_Python 类总结
  6. geforce experience_Nvidia? Geforce? Experience?是什么?如何使用呢?
  7. 蓝桥杯2016年第七届C/C++省赛B组第五题-抽签
  8. [ZT]新点子,就在空气中飘荡着...
  9. 封装组件引发的问题——vue给对象添加响应式属性
  10. OBD(On-Board-Diagnose)
  11. 《职场正能量》读后感
  12. laravel框架excel扩展包maatwebsite-excel升级3.1版本兼容处理
  13. 苏州企业研发费用精准统计难点分析
  14. 特征空间之点检测(MATLAB)
  15. 铁道通信、工矿、基建单位用的地下管线探测仪
  16. 2554. 【NOIP2011模拟9.7】帕秋莉·诺蕾姬 (Standard IO)
  17. ## 虚幻四引擎学习——初学者
  18. 【限时活动】99=苏宁会员+万达观影年卡
  19. 淘宝斗地主残局玩法技术方案总结
  20. 新媒体文章怎么写,新媒体写作注意事项!

热门文章

  1. msm8916 MDP(mobile display processor) 简介
  2. 高性价比蓝牙耳机选哪个?千元内音质最好的蓝牙耳机
  3. android 绘指针,Android智能指针
  4. 如何设置电子表格的表头不动,剩下的单元格滑动?
  5. iOS 操作系统应用权限列表
  6. centos挂载超过2T的硬盘
  7. ffmpeg 合并多音轨的问题
  8. 漫威迷问题考验_尽管存在一些问题,但漫威的复仇者联盟还是很棒的
  9. 螺丝钉拧不下来了怎么办
  10. 树莓派4支持多大tf卡_微软和Intel计划恢复对华为的支持 | 树莓派4单板计算机发布【新闻简报 】...