使用node.js的Crypto模块Hmac算法对信息进行认证
来源:互联网 发布:怎么才能加入淘宝 编辑:程序博客网 时间:2024/06/16 06:18
1.引入 crypto模块
var crypto = require('crypto');console.log(crypto.getHashes()); //打印支持的hash算法
运行结果:
[ 'DSA', 'DSA-SHA', 'DSA-SHA1', 'DSA-SHA1-old', 'RSA-MD4', 'RSA-MD5', 'RSA-MDC2', 'RSA-RIPEMD160', 'RSA-SHA', 'RSA-SHA1', 'RSA-SHA1-2', 'RSA-SHA224', 'RSA-SHA256', 'RSA-SHA384', 'RSA-SHA512', 'dsaEncryption', 'dsaWithSHA', 'dsaWithSHA1', 'dss1', 'ecdsa-with-SHA1', 'md4', 'md4WithRSAEncryption', 'md5', 'md5WithRSAEncryption', 'mdc2', 'mdc2WithRSA', 'ripemd', 'ripemd160', 'ripemd160WithRSA', 'rmd160', 'sha', 'sha1', 'sha1WithRSAEncryption', 'sha224', 'sha224WithRSAEncryption', 'sha256', 'sha256WithRSAEncryption', 'sha384', 'sha384WithRSAEncryption', 'sha512', 'sha512WithRSAEncryption', 'shaWithRSAEncryption', 'ssl2-md5', 'ssl3-md5', 'ssl3-sha1', 'whirlpool' ]
2.一些加密算法
《密码学》课上,老师讲了主要的信息认证方法
- md5消息认证
- md5加盐消息认证
- sha消息认证
(1)md5
md5的认证是不可逆的。一个明文生成的密文是唯一的。只有两个明文相同,他们的密文才能相同。但是,攻击者可以使用彩虹表来攻击(暴力穷举呗)。越来越不安全。
var crypto = require('crypto');//明文文本var content = 'password';//创建MD5加密方式var md5 = crypto.createHash('md5');//加密过程md5.update(content);//d为输出的最终密文var d = md5.digest('hex');
既然不再安全,就不推荐使用了。
(2)sha1
var crypto = require('crypto');var content = 'password';//创建sha1加密方式var shasum = crypto.createHash('sha1');shasum.update(content);var d = shasum.digest('hex');
MD5与sha1的不同点
- MD5 使用小端排序LITTLE-ENDIAN,sha1 使用大端排序BIG-ENDIAN
- MD5最后生成的摘要信息是16个字节,SHA1是20个字节。
(3)hmac
算法过程如下:
- 随机生成16位随机数,作为密钥。
- 密码加密
- 密钥对文本进行sha1加密
- 传输
认证流程
- 先由客户端向服务器发出一个验证请求。
- 服务器接到此请求后生成一个随机数并通过网络传输给客户端(此为挑战)。
- 客户端将收到的随机数。使用该随机数与用户输入的的密钥进行HMAC-MD5运算并得到一个结果作为认证证据传给服务器(此为响应)。
- 与此同时,服务器也使用该随机数与存储在服务器数据库中的该客户密钥进行HMAC-MD5运算,如果服务器的运算结果与客户端传回的响应结果相同,则认为客户端是一个合法用户。
Signture = require('crypto') .createHmac('sha1', SecrectKey) .update(content) .digest() .toString('base64');
有效防止彩虹表攻击。
0 0
- 使用node.js的Crypto模块Hmac算法对信息进行认证
- 详解Node.js API系列 Crypto加密模块(2) Hmac
- node.js 使用crypto模块进行RSA加解密操作
- Node.js crypto模块
- 《ASCE1885的信息安全》の使用Crypto++的MD5算法对字符串进行哈希
- node.js 的crypto模块,加密cookie
- node.js 的crypto模块用来加密
- node.js之基础加密算法模块crypto
- Node.js基本模块crypto(加解密)
- Node.js内置模块之加密crypto
- HMAC 算法的使用
- 使用Node.js进行对数据库的CRUD操作
- node.js 使用fs模块对系统文件及目录进行读写操作
- python Crypto模块的使用
- NODE.JS——CRYPTO 加密模块(md5)
- NODE.JS学习笔记——CRYPTO 加密模块
- 详解Node.js API系列 Crypto加密模块(1)
- 详解Node.js API系列 Crypto加密模块
- HTML5+规范:Downloader(管理网络文件下载任务)
- 分布式系统(三)——分布式共享内存和顺序一致性
- Java 多线程学习笔记 (一)interrupt
- Android 编码问题
- 【FFMPEG】网络流媒体协议
- 使用node.js的Crypto模块Hmac算法对信息进行认证
- QT串口通信(1)
- TMS320C6748数据手册中文版第三章
- 我的PHP笔记(杂二)
- 傅里叶变换和逆变换公式的我理解意义
- Android Studio插件整理
- redis字符串操作
- codeforces gym 100645A
- MySQL function创建