博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过crypto模块实现加密
阅读量:6087 次
发布时间:2019-06-20

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

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值。

 

 

转载于:https://www.cnblogs.com/THUDM/p/9808078.html

你可能感兴趣的文章
使用tar做备份
查看>>
从表到里学习JVM实现
查看>>
随机码的生成,python 2.7/eclipse 3.7+PyDev 2.4.0
查看>>
linux 下进程的最大线程数
查看>>
PHP类库转WORD, EXCEL, PDF, HTML格式
查看>>
UILabel
查看>>
H3C交换机DHCP服务配置命令+详解
查看>>
linux安全管理
查看>>
关于sqlserver2008本地计算机上的MSSQLSERVER服务不能启动的问题解决
查看>>
我们到底在为谁工作
查看>>
淘宝海量存储之单机事务面临的问题及解决办法
查看>>
使用struts2的token机制和cookie来防止表单重复提交
查看>>
RabbitMQ (1) 消息的发送与接收
查看>>
SqlServerExpress2005 自动备份
查看>>
Exchange 端口说明
查看>>
orcal数据库中的随机函数1
查看>>
JavaScript学习笔记-原型继承
查看>>
数据结构分析之——链表
查看>>
鲶鱼效应
查看>>
oracle数据库
查看>>