NODE.JS加密模块CRYPTO常用方法介绍


Posted in Javascript onJune 05, 2014

使用require('crypto')调用加密模块。

加密模块需要底层系统提供OpenSSL的支持。它提供了一种安全凭证的封装方式,可以用于HTTPS安全网络以及普通HTTP连接。

该模块还提供了一套针对OpenSSL的hash(哈希),hmac(密钥哈希),cipher(编码),decipher(解码),sign(签名)以及verify(验证)等方法的封装。

crypto.createCredentials(details)

创建一个凭证对象,可选参数details为一个带键值的字典:
key:为字符串型,PEM编码的私钥。
cert:为字符串型,PEM编码的认证证书。
ca:字符串形式的PEM编码可信CA证书,或证书列表。

如果没有给出'ca'的详细内容,那么node.js将会使用默认的公开受信任列表,该表位于http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt。

crypto.createHash(algorithm)

创建并返回一个hash对象,它是一个指定算法的加密hash,用于生成hash摘要。

参数algorithm可选择系统上安装的OpenSSL版本所支持的算法。例如:'sha1', 'md5', 'sha256', 'sha512'等。在近期发行的版本中,openssl list-message-digest-algorithms会显示这些可用的摘要算法。

hash.update(data)

更新hash的内容为指定的data。当使用流数据时可能会多次调用该方法。

hash.digest(encoding='binary')

计算所有传入数据的hash摘要。参数encoding(编码方式)可以为'hex', 'binary' 或者'base64'。

crypto.createHmac(algorithm, key)

创建并返回一个hmac对象,它是一个指定算法和密钥的加密hmac。

参数algorithm可选择OpenSSL支持的算法 - 参见上文的createHash。参数key为hmac所使用的密钥。

hmac.update(data)

更新hmac的内容为指定的data。当使用流数据时可能会多次调用该方法。

hmac.digest(encoding='binary')

计算所有传入数据的hmac摘要。参数encoding(编码方式)可以为'hex', 'binary' 或者'base64'。

crypto.createCipher(algorithm, key)

使用指定的算法和密钥创建并返回一个cipher对象。

参数algorithm可选择OpenSSL支持的算法,例如'aes192'等。在最近的发行版中,openssl list-cipher-algorithms会显示可用的加密的算法。

cipher.update(data, input_encoding='binary', output_encoding='binary')

使用参数data更新要加密的内容,其编码方式由参数input_encoding指定,可以为 'utf8', 'ascii'或者'binary'。参数output_encoding指定了已加密内容的输出编码方式,可以为 'binary', 'base64'或'hex'。

返回已加密的内容,当使用流数据时可能会多次调用该方法。

cipher.final(output_encoding='binary')

返回所有剩余的加密内容,output_encoding输出编码为'binary', 'ascii'或'utf8'其中之一。

crypto.createDecipher(algorithm, key)

使用给定的算法和密钥创建并返回一个解密对象。该对象为上述加密对象的反向运算。

decipher.update(data, input_encoding='binary', output_encoding='binary')

使用参数data更新要解密的内容,其编码方式为'binary','base64'或'hex'。参数output_encoding指定了已解密的明文内容的输出编码方式,可以为 'binary','ascii'或'utf8'。

decipher.final(output_encoding='binary')

返回全部剩余的已解密的明文,其output_encoding' 为'binary', 'ascii'或'utf8'`其中之一。

crypto.createSign(algorithm)

使用给定的算法创建并返回一个签名器对象。在现有的OpenSSL发行版中,openssl list-public-key-algorithms会显示可用的签名算法,例如:'RSA-SHA256'。

signer.update(data)

使用data参数更新签名器对象。当使用流数据时可能会多次调用该方法。

signer.sign(private_key, output_format='binary')

对所有传入签名器的数据计算其签名。private_key为字符串,它包含了PEM编码的用于签名的私钥。

返回签名,其output_format输出可以为'binary', 'hex' 或者'base64'。

crypto.createVerify(algorithm)

使用给定算法创建并返回一个验证器对象。它是上述签名器对象的反向运算。

verifier.update(data)

使用data参数更新验证器对象。当使用流数据时可能会多次调用该方法。

verifier.verify(cert, signature, signature_format='binary')

使用参数cert和signature验证已签名的数据,cert为经过PEM编码的公钥字符串,signature为之前已计算的数据的签名,signature_format可以为'binary','hex' 或者'base64'。

根据对数据和公钥进行签名有效性验证的结果,返回true或者false。

当你需要一个不可逆的加密代码如何写

var text = "123|12312312123123121231231212312312123123121231231212312312";

var hasher=crypto.createHash("md5");

hasher.update(text);

var hashmsg=hasher.digest('hex');//hashmsg为加密之后的数据

当你需要一个加密和解密的环境时

var key="asdhjwheru*asd123-123";//加密的秘钥

var text = "123|12312312123123121231231212312312123123121231231212312312";

var crypted =cipher.update(text,'utf8','hex');

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

var message=crypted;//加密之后的值

var decipher = crypto.createDecipher('aes-256-cbc',key);

var dec=decipher.update(message,'hex','utf8');

dec+= decipher.final('utf8');//解密之后的值
Javascript 相关文章推荐
javascript instanceof 与typeof使用说明
Jan 11 Javascript
判断浏览器的javascript版本的代码
Sep 03 Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
Jul 27 Javascript
JavaScript测试工具之Karma-Jasmine的安装和使用详解
Dec 03 Javascript
protractor的安装与基本使用教程
Jul 07 Javascript
简单实现jQuery弹窗效果
Oct 30 jQuery
js实现左右两侧浮动广告
Jul 09 Javascript
angular2 ng2-file-upload上传示例代码
Aug 23 Javascript
详解vue 数组和对象渲染问题
Sep 21 Javascript
100行代码实现vue表单校验功能(小白自编)
Nov 19 Javascript
原生JS封装拖动验证滑块的实现代码示例
Jun 01 Javascript
Vue3中的Refs和Ref详情
Nov 11 Vue.js
jquery左边浮动到一定位置时显示返回顶部按钮
Jun 05 #Javascript
在Node.js中实现文件复制的方法和实例
Jun 05 #Javascript
javascript移动设备Web开发中对touch事件的封装实例
Jun 05 #Javascript
删除条目时弹出的确认对话框
Jun 05 #Javascript
判断复选框是否被选中的两种方法
Jun 04 #Javascript
jQuery页面加载初始化常用的三种方法
Jun 04 #Javascript
JS替换字符串中字符即替换全部而不是第一个
Jun 04 #Javascript
You might like
基于mysql的bbs设计(二)
2006/10/09 PHP
解析PHP多种序列化与反序列化的方法
2013/06/06 PHP
PHP htmlspecialchars() 函数实例代码及用法大全
2018/09/18 PHP
php实现获取近几日、月时间示例
2019/07/06 PHP
javascript入门·图片对象(无刷新变换图片)\滚动图像
2007/10/01 Javascript
一个选择最快的服务器转向代码
2009/04/27 Javascript
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
2011/08/28 Javascript
Js 回车换行处理的办法及replace方法应用
2013/01/24 Javascript
jQuery事件绑定用法详解
2016/09/08 Javascript
微信小程序  modal详解及实例代码
2016/11/09 Javascript
Vue.js教程之计算属性
2016/11/11 Javascript
Webpack打包css后z-index被重新计算的解决方法
2017/06/18 Javascript
详解node.js的http模块实例演示
2018/07/12 Javascript
Layui 设置select下拉框自动选中某项的方法
2018/08/14 Javascript
基于JQuery实现页面定时弹出广告
2020/05/08 jQuery
何时/使用 Vue3 render 函数的教程详解
2020/07/25 Javascript
vue-openlayers实现地图坐标弹框效果
2020/09/24 Javascript
js+html+css实现手动轮播和自动轮播
2020/12/30 Javascript
[01:13:08]2018DOTA2亚洲邀请赛4.6 淘汰赛 mineski vs LGD 第二场
2018/04/10 DOTA
[29:59]完美世界DOTA2联赛PWL S3 Forest vs access 第二场 12.11
2020/12/13 DOTA
python小技巧之批量抓取美女图片
2014/06/06 Python
怎样使用Python脚本日志功能
2016/08/14 Python
python 与GO中操作slice,list的方式实例代码
2017/03/20 Python
代码详解django中数据库设置
2019/01/28 Python
python、Matlab求定积分的实现
2019/11/20 Python
设置jupyter中DataFrame的显示限制方式
2020/04/12 Python
完美解决python针对hdfs上传和下载的问题
2020/06/05 Python
美国第二大连锁书店:Books-A-Million
2017/12/28 全球购物
软件测试工程师结构化面试题库
2016/11/23 面试题
化工专业个人的求职信范文
2013/11/28 职场文书
高三英语教学反思
2014/01/13 职场文书
婚礼女方父母答谢词
2015/01/04 职场文书
2015秋季开学典礼致辞
2015/07/16 职场文书
小学四年级班务总结该怎么写?
2019/08/16 职场文书
Python 高级库15 个让新手爱不释手(推荐)
2021/05/15 Python
Pytorch中Softmax与LogSigmoid的对比分析
2021/06/05 Python