通过crypto模块实现加密

THUDMTEAM 李相赫

我们在平时做作业或自己开发一个程序的时候,往往会把用户的密码等重要信息直接保存到数据库当中,但是这种做法其实是非常危险的。如果有个黑客攻击了我们的数据库,那么一些重要信息会被黑客劫走,所以我们要对一些重要信息进行加密处理。

字符串的加密可分为单向加密,对称加密和非对称加密。单向加密是指加密之后无法恢复原状的加密方式,我们可以通过同样的加密方式直接与数据库中的数据做比较。本文章中主要讨论一下单向加密方式。

createHash

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

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

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

digest中填入encoding方法,crpyto提供的encoding方法有base64,hex等,和Hash算法一样选择一个自己认为合适的Hash算法(个人认为还是推荐base64,hex太长了)。

createHash方法写起来很简单,破密码也一样简单,黑客可以通过彩虹表,很容易破解出其中的规律而得到信息,所以createHash这种方式非常不推荐使用。那我们应该是用什么方法对信息进行加密呢,有一个方法叫做Password-Based Key Derivation Function 2,简称PBKDF2。

Password-Based Key Derivation Function 2(PBKDF2)

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

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

 

 

posted @ 2018-10-18 01:28  THUDMTEAM  阅读(399)  评论(0编辑  收藏  举报