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 链式延迟执行DOME
Jan 04 Javascript
JS模拟自动点击的简单实例
Aug 08 Javascript
删除select中所有option选项jquery代码
Aug 12 Javascript
js 中的switch表达式使用示例
Jun 03 Javascript
提升PHP安全:8个必须修改的PHP默认配置
Nov 17 Javascript
分享两个手机访问pc网站自动跳转手机端网站代码
Dec 24 Javascript
JavaScript操作Cookie方法实例分析
May 27 Javascript
jquery中表单 多选框的一种巧妙写法
Sep 06 Javascript
使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐)
Mar 21 jQuery
Javascript中的作用域及块级作用域
Dec 08 Javascript
微信小程序用户授权弹窗 拒绝时引导用户重新授权实现
Jul 29 Javascript
原生JS中应该禁止出现的写法
May 05 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
smarty模板局部缓存方法使用示例
2014/06/17 PHP
ThinkPHP3.1新特性之查询条件预处理简介
2014/06/19 PHP
php多个文件及图片上传实例详解
2014/11/10 PHP
php in_array() 检查数组中是否存在某个值详解
2016/11/23 PHP
laravel 去掉index.php伪静态的操作方法
2019/10/12 PHP
js 变量类型转换常用函数与代码[比较全]
2009/12/01 Javascript
jquery keypress,keyup,onpropertychange键盘事件
2010/06/25 Javascript
事件绑定之小测试  onclick && addEventListener
2011/07/31 Javascript
中国地区三级联动下拉菜单效果分析
2012/11/15 Javascript
JavaScript中OnLoad几种使用方法
2012/12/15 Javascript
使用JavaScript构建JSON格式字符串实现步骤
2013/03/22 Javascript
DOM基础教程之使用DOM控制表单
2015/01/20 Javascript
JavaScript实现的一个倒计时的类
2015/03/12 Javascript
JS组件Bootstrap Select2使用方法详解
2020/04/17 Javascript
jQuery模仿阿里云购买服务器选择购买时间长度的代码
2016/04/29 Javascript
用iframe实现不刷新整个页面上传图片的实例
2016/11/18 Javascript
jquery实现input框获取焦点的方法
2017/02/06 Javascript
javascript变量提升和闭包理解
2018/03/12 Javascript
详解vue表单——小白速看
2018/04/08 Javascript
关于vue的语法规则检测报错问题的解决
2018/05/21 Javascript
如何解决日期函数new Date()浏览器兼容性问题
2019/09/11 Javascript
jQuery实现倒计时功能完整示例
2020/06/01 jQuery
vue基础知识--axios合并请求和slot
2020/06/04 Javascript
echarts.js 动态生成多个图表 使用vue封装组件操作
2020/07/19 Javascript
Ubuntu下使用Python实现游戏制作中的切分图片功能
2018/03/30 Python
详解pyqt5 动画在QThread线程中无法运行问题
2018/05/05 Python
Jupyter Notebook输出矢量图实例
2020/04/14 Python
美国汽配连锁巨头Pep Boys官网:轮胎更换、汽车维修服务和汽车零部件
2017/01/14 全球购物
PHP笔试题
2012/02/22 面试题
小区的门卫岗位职责
2014/10/01 职场文书
八项规定自查自纠报告及整改措施
2014/10/26 职场文书
2015教师年度考核评语
2015/03/25 职场文书
2015年度个人工作总结报告
2015/10/24 职场文书
高三英语教学反思
2016/03/03 职场文书
Pillow图像处理库安装及使用
2022/04/12 Python
Java完整实现记事本代码
2022/06/16 Java/Android