经过crypto模块实现加密

THUDMTEAM 李相赫算法

咱们在平时作做业或本身开发一个程序的时候,每每会把用户的密码等重要信息直接保存到数据库当中,可是这种作法实际上是很是危险的。若是有个黑客攻击了咱们的数据库,那么一些重要信息会被黑客劫走,因此咱们要对一些重要信息进行加密处理。数据库

字符串的加密可分为单向加密,对称加密和非对称加密。单向加密是指加密以后没法恢复原状的加密方式,咱们能够经过一样的加密方式直接与数据库中的数据作比较。本文章中主要讨论一下单向加密方式。安全

createHashdom

createHash是一种最简单的单向加密方式,如下是具体例子:加密

createHash中写入Hash算法,crypto提供的算法有sha256,sha512,MD5等,选择一个本身认为合适的Hash算法。spa

update中填入要加密的对象,它能够是密码,也能够是找回密码时使用的安全答案。code

digest中填入encoding方法,crpyto提供的encoding方法有base64,hex等,和Hash算法同样选择一个本身认为合适的Hash算法(我的认为仍是推荐base64,hex太长了)。对象

createHash方法写起来很简单,破密码也同样简单,黑客能够经过彩虹表,很容易破解出其中的规律而获得信息,因此createHash这种方式很是不推荐使用。那咱们应该是用什么方法对信息进行加密呢,有一个方法叫作Password-Based Key Derivation Function 2,简称PBKDF2。blog

Password-Based Key Derivation Function 2(PBKDF2)ip

pbkdf2方法比createHash复杂一点,可是它的效果会比createHash好好几倍。如下为具体例子:

先经过crypto模块提供的randomBytes方法,定义一个salt并赋值给buf中,再调用pbkdf2方法。它总共有5个参数,从左到右依次为要加密的信息,salt,反复次数,密码长度和Hash算法。使用此方法对信息加密,那么经过彩虹表破解密码那是彻底不可能的。可是要注意的一点是保存加密的密码的同时,也要保存相应的salt值。由于每次要对信息加密的时候,randomBytes会返回出一个不一样的值,可是pbkdf2中的salt值改变,那么相应的加密结果也会改变的,因此必定要记住保存加密的信息的同时,也要保存salt值。

相关文章
相关标签/搜索