博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
详解Node.js API系列 Crypto加密模块(1)
阅读量:7116 次
发布时间:2019-06-28

本文共 2100 字,大约阅读时间需要 7 分钟。

hot3.png

MD5加密算法

算法简介

MD5的全称是Message-Digest Algorithm 5(信息-),在90年代初由Mit Laboratory for Computer Science和Rsa data security inc的Ronald l. rivest开发出来,经md2、md3和md4发展而来。它的作用是让大容量信息在用签署私人密匙前被“压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数).不管是md2、md4还是,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要.

MD5 算法的大小为 128 位。是一种不可逆的算法。

算法特点

  • 两个不同的明文不会得到相同的输出值
  • MD5结果不能反推明文,不可逆

安全性

从安全的角度讲,MD5的输出为128位,若采用纯强力攻击寻找一个消息具有给定值的计算困难性为2128,用每秒可试验1000000000个消息的计算机需时1.07×1022年。若采用法,寻找有相同Hash值的两个消息需要试验264个消息,用每秒可试验1000000000个消息的计算机需时585年。

实际应用上,例如我知道‘password’的MD5值是5f4dcc3b5aa765d61d8327deb882cf99,那么我就用一个数据库存起来,只要我看到5f4dcc3b5aa765d61d8327deb882cf99,我就知道这个是口令‘password‘使用MD5处理之后的值,原来的口令就是’password'。MD5在身份鉴别系统中用于口令保护已经是很久了事情了,大部分黑客也有针对这种Hash方式准备相应的数据库进行反查,这种数据库称为,MD5的安全性大大减弱。

MD5加密例程

var crypto = require('crypto');var content = 'password'var md5 = crypto.createHash('md5');md5.update(content);var d = md5.digest('hex');  //MD5值是5f4dcc3b5aa765d61d8327deb882cf99

SHA1算法

算法简介

SHA1的全称是Secure Hash Algorithm(安全)。加密哈希函数将任意长度的字符串为固定长度的小型二进制字符串。加密有这样一个属性:在计算上不大可能找到散列为相同的值的两个不同的输入;也就是说,两组数据的哈希值仅在对应的数据也匹配时才会匹配。数据的少量更改会在哈希值中产生不可预知的大量更改。所以你很难从加密后的文字中找到蛛丝马迹。

SHA1 算法的哈希值大小为 160 位。是一种不可逆的算法。

SHA1加密例程

var crypto = require('crypto');var content = 'password'var shasum = crypto.createHash('sha1');shasum.update(content);var d = shasum.digest('hex');

MD5与sha1的不同点

  • MD5 使用小端排序,sha1 使用排序BIG-ENDIAN
  • MD5最后生成的摘要信息是16个字节,SHA1是20个字节。

 

 

随着互联网的发展,MD5已经变得越来越不安全了,黑客可以通过彩虹表,查出MD5值所对应的密码,为了解决这个问题,很多网站都开始采用需要密钥加密的Hmac算法。

Hmac算法

HMAC是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code),HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。

认证流程

(1) 先由客户端向服务器发出一个验证请求。

(2) 服务器接到此请求后生成一个随机数并通过网络传输给客户端(此为挑战)。

(3) 客户端将收到的随机数提供给ePass,由ePass使用该随机数与存储在ePass中的密钥进行HMAC-MD5运算并得到一个结果作为认证证据传给服务器(此为响应)。

(4) 与此同时,服务器也使用该随机数与存储在服务器数据库中的该客户密钥进行HMAC-MD5运算,如果服务器的运算结果与客户端传回的响应结果相同,则认为客户端是一个合法用户

BAE加密验证

bae的PHP代码签名参考

Signture = urlencode(base64_encode(hash_hmac('sha1', Content, SecretKey,true)))
  • SecretKey 加密的要是
  • Content 传输的内容
  • sha1生成的算法
来源:

Node.js版本的

Signture = require('crypto').createHmac('sha1', SecrectKey).        update(content).digest().toString('base64');

转载于:https://my.oschina.net/u/1582119/blog/307989

你可能感兴趣的文章
在VB.NET中对于多维数组相关基础知识
查看>>
RSA加密算法实现 Java
查看>>
【cocos2dx进阶】调试篇(3)cocos2dx的Log改造
查看>>
CentOS中vsftp安装与配置
查看>>
linux exec的用法
查看>>
我的友情链接
查看>>
Spark Graphx编程指南
查看>>
配置tomcat
查看>>
基于glusterfs和gearman的离线任务运算分布式化方案介绍
查看>>
小学生信息技术课的有效教学
查看>>
天堂与地狱的区别
查看>>
java io小实例
查看>>
127小时
查看>>
Windows Server 2008 R2 SP1中的具体改进
查看>>
Autoit 自动化安装软件
查看>>
shell 脚本-----循环数组
查看>>
Merge into 详细介绍
查看>>
MySQL Server参数优化 - innodb_file_per_table(独立表空间)
查看>>
ubuntu中文出现乱码
查看>>
Linux系统命令之tcpdump
查看>>