使用crypto模块实现md5加密功能(解决中文加密先后端不一致的问题)

正常状况下使用md5加密html

var crypto = require('crypto');

var md5Sign = function (data) {
    var md5 = crypto.createHash('md5').update(data).digest('hex');
    return md5;
}

实际开发中常常须要前端nodejs调用后端java接口,使用上述方法会出现中文加密结果不一样的状况,解决方法以下:前端

var crypto = require('crypto');

var md5Sign = function (data) {
    // 加入字符编码
    var md5 = crypto.createHash('md5').update(data, 'utf-8').digest('hex');
    return md5;
}

或者java

var crypto = require('crypto');
var Buffer = require('buffer').Buffer; 

var md5Sign = function (data) {
    // 将字符转换成二进制流
    var str = new Buffer(data).toString('binary');
    var md5 = crypto.createHash('md5').update(str).digest('hex');
    return md5;
}

 

【crypto】node

The crypto module provides cryptographic functionality that includes a set of wrappers for OpenSSL's hash, HMAC, cipher, decipher, sign and verify functions.算法

即:crypto是一套集成了包含OpenSSL的散列,HMAC、密码、解密、签名和验证功能的加密模块。数据库

关于crypto加密模块的使用,能够参考:http://blog.fens.me/nodejs-crypto/后端

 

【md5】安全

MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),它的做用是让大容量信息在用数字签名软件签署私人密匙前被“压缩”成一种保密的格式(就是把一个任意长度的字节串变换成必定长的大整数).无论是md二、md4仍是md5,它们都须要得到一个随机长度的信息并产生一个128位的信息摘要.app

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

算法特色:

  一、压缩性:任意长度的数据,算出的MD5值长度都是固定的。

  二、容易计算:从原数据计算出MD5值很容易。

  三、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所获得的MD5值都有很大区别。

  四、强抗碰撞:已知原数据和其MD5值,想找到一个具备相同MD5值的数据(即伪造数据)是很是困难的。

  五、不可逆性:MD5结果不能反推明文,不可逆。

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

【彩虹表】

彩虹表(Rainbow Table)是一个用于加密散列函数逆运算的预先计算好的表, 为破解密码的散列值(或称哈希值、微缩图、摘要、指纹、哈希密文)而准备。通常主流的彩虹表都在100G以上。 这样的表经常用于恢复由有限集字符组成的固定长度的纯文本密码。这是空间/时间替换的典型实践, 比每一次尝试都计算哈希的暴力破解处理时间少而储存空间多,但却比简单的对每条输入散列翻查表的破解方式储存空间少而处理时间多。使用加盐的KDF函数可使这种攻击难以实现。

属性:密码对的集合

大小:主流的在100G以上

做用:快速地根据哈希值破解各种密码

 

参考资料:http://blog.csdn.net/u011202334/article/details/50585777

     http://blog.csdn.net/fdipzone/article/details/50768339

     http://blog.csdn.net/u011202334/article/details/50585777

               http://www.cnblogs.com/ajun/p/4167280.html

相关文章
相关标签/搜索