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 一段左右两边随屏滚动的代码
Jun 18 Javascript
基于Jquery的将DropDownlist的选中值赋给label的实现代码
May 06 Javascript
node.js中的buffer.slice方法使用说明
Dec 10 Javascript
JavaScript的Number对象的toString()方法
Dec 18 Javascript
详解iframe与frame的区别
Jan 13 Javascript
AngularJS使用拦截器实现的loading功能完整实例
May 17 Javascript
js数组方法reduce经典用法代码分享
Jan 07 Javascript
解析vue路由异步组件和懒加载案例
Jun 08 Javascript
JS使用对象的defineProperty进行变量监控操作示例
Feb 02 Javascript
vue自定义指令用法经典实例小结
Mar 16 Javascript
解决微信小程序调用moveToLocation失效问题【超简单】
Apr 12 Javascript
详解vue 2.6 中 slot 的新用法
Jul 09 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获取字段名示例分享
2014/03/03 PHP
浅谈php的优缺点
2015/07/14 PHP
laravel中命名路由的使用方法
2017/02/24 PHP
Mac系统下安装PHP Xdebug
2018/03/30 PHP
jquery入门——事件机制之事件中的冒泡现象示例解释
2020/09/12 Javascript
在Mac OS下使用Node.js的简单教程
2015/06/24 Javascript
easyui Draggable组件实现拖动效果
2015/08/19 Javascript
js弹出对话框方式小结
2015/11/17 Javascript
利用Plupload.js解决大文件上传问题, 带进度条和背景遮罩层
2017/03/15 Javascript
Node.js对MongoDB数据库实现模糊查询的方法
2017/05/03 Javascript
Bootstrap响应式导航由768px变成992px的实现代码
2017/06/15 Javascript
Node.js pipe实现源码解析
2017/08/12 Javascript
Vue2.0父子组件传递函数的教程详解
2017/10/16 Javascript
浅析java线程中断的办法
2018/07/29 Javascript
详解vuex commit保存数据技巧
2018/12/25 Javascript
vue.js循环radio的实例
2019/11/07 Javascript
ES6中Set和Map用法实例详解
2020/03/02 Javascript
Python批量修改文件后缀的方法
2014/01/26 Python
Python之eval()函数危险性浅析
2014/07/03 Python
python调用staf自动化框架的方法
2018/12/26 Python
python用类实现文章敏感词的过滤方法示例
2019/10/27 Python
浅谈Python中os模块及shutil模块的常规操作
2020/04/03 Python
python由已知数组快速生成新数组的方法
2020/04/08 Python
基于Python实现体育彩票选号器功能代码实例
2020/09/16 Python
几个解决兼容IE6\7\8不支持html5标签的几个方法
2013/01/07 HTML / CSS
新西兰珠宝品牌:Michael Hill
2017/09/16 全球购物
波比布朗英国官网:Bobbi Brown英国
2017/11/13 全球购物
说一下mysql, oracle等常见数据库的分页实现方案
2012/09/29 面试题
个人求职信范文分享
2013/12/13 职场文书
20年同学聚会邀请函
2014/02/04 职场文书
2014年迎新年活动方案
2014/02/19 职场文书
合作协议书模板
2014/10/10 职场文书
2016春季运动会前导词
2015/11/25 职场文书
简短的人生哲理(38句)
2019/08/13 职场文书
【海涛教你打DOTA】剑圣第一人称视角解说
2022/04/01 DOTA
Windows server 2022创建创建林、域树、子域的步骤
2022/06/25 Servers