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 相关文章推荐
js 将json字符串转换为json对象的方法解析
Nov 13 Javascript
基于javascript的JSON格式页面展示美化方法
Jul 02 Javascript
javascript实现window.print()去除页眉页脚
Dec 30 Javascript
JavaScript+html5 canvas实现本地截图教程
Apr 16 Javascript
Vue2递归组件实现树形菜单
Apr 10 Javascript
jQuery 控制文本框自动缩小字体填充
Jun 16 jQuery
浅谈Node模块系统及其模式
Nov 17 Javascript
JS判断用户用的哪个浏览器实例详解
Oct 09 Javascript
如何通过shell脚本自动生成vue文件详解
Sep 10 Javascript
利用JS代码自动删除稿件的普通弹幕功能
Sep 20 Javascript
VUE和Antv G6实现在线拓扑图编辑操作
Oct 28 Javascript
JavaScript 定时器详情
Nov 11 Javascript
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
PHP写UltraEdit插件脚本实现方法
2011/12/26 PHP
thinkPHP框架实现图像裁剪、缩放、加水印的方法
2017/03/14 PHP
laravel框架分组控制器和分组路由实现方法示例
2020/01/25 PHP
jquery 常用操作方法
2010/01/28 Javascript
jquery 查找select ,并触发事件的实现代码
2011/03/30 Javascript
js中document.getElementByid、document.all和document.layers区分介绍
2011/12/08 Javascript
深入理解JavaScript系列(16) 闭包(Closures)
2012/04/12 Javascript
js返回上一页并刷新代码整理
2012/12/21 Javascript
屏蔽相应键盘按钮操作
2014/03/10 Javascript
js调用后台、后台调用前台等方法总结
2014/04/17 Javascript
浅析webapp框架AngularUI的demo
2014/12/21 Javascript
jquery控制表单输入框显示默认值的方法
2015/05/22 Javascript
js禁止页面刷新与后退的方法
2015/06/08 Javascript
JavaScript数据绑定实现一个简单的 MVVM 库
2016/04/08 Javascript
JavaScript的字符串方法汇总
2016/07/31 Javascript
Bootstrap图片轮播组件Carousel使用方法详解
2016/10/20 Javascript
JS+CSS3制作炫酷的弹窗效果
2016/11/08 Javascript
三种方式实现瀑布流布局
2017/02/10 Javascript
AngularJS学习第一篇 AngularJS基础知识
2017/02/13 Javascript
vue.js 微信支付前端代码分享
2018/02/10 Javascript
Node.js 使用jade模板引擎的示例
2018/05/11 Javascript
使用原生JS实现滚轮翻页效果的示例代码
2020/05/31 Javascript
Python数据类型学习笔记
2016/01/13 Python
Python中的并发处理之asyncio包使用的详解
2018/04/03 Python
python selenium执行所有测试用例并生成报告的方法
2019/02/13 Python
pandas 层次化索引的实现方法
2019/07/06 Python
浅析python 动态库m.so.1.0错误问题
2020/05/09 Python
CSS3中的注音对齐属性ruby-align用法指南
2016/07/01 HTML / CSS
CSS3实现酷炫的3D旋转透视效果
2019/11/21 HTML / CSS
加拿大折扣、优惠券和交易网站:WagJag
2018/02/07 全球购物
Andrew Marc官网:设计师外套的领先制造商
2019/10/30 全球购物
2014两会学习心得:时代的发展
2014/03/17 职场文书
2014年创先争优活动总结
2014/05/04 职场文书
2014县委书记党的群众路线教育实践活动对照检查材料思想汇报
2014/09/22 职场文书
运动会800米赞词
2015/07/22 职场文书
《夹竹桃》教学反思
2016/02/23 职场文书