js对数据进行加密

JavaScript对数据进行加密

1.md5方式加密

每次生成的值是一样的,一些网站可以破解,因为每次存储的都是一样的值

不可逆(法从密文推出原文)

有可能出现多个原文得到同一个密码

一种攻击方法是,攻击者记录了一张巨大的密码库,预先计算了常用密码的 hash 值,这样只需要搜索 hash 值就能寻找到一个合适的密码用于登录。这就是被彩虹表攻击。

解决彩虹表的问题是加盐,在加密之前,对原文混入其他信息,混入的信息不存放到数据库中。实际寻找到其他原文也无法登录。

加密:
import * as md5 from 'md5';

const passwrod = '123456';
const transP = md5(passwrod); 固定值:e10adc3949ba59abbe56e057f20f883e
加盐加密:
const passwrod = '123456';
const salt = 'dmxys'
const transP = md5(passwrod + salt); 固定值:4e6a2881e83262a72f6c70f48f3e8022
验证密码:先加密,再验证
const passwrod = '123456';
const databasePassword = 'e10adc3949ba59abbe56e057f20f883e'
if (md5(passwrod) === databasePassword ) {
   console.log('密码通过');
}

2.bcriptjs方式加密

每一次 HASH 出来的值不一样

不可逆

计算非常缓慢

同一种明文(plaintext),每次加密后的密文都不一样,而且不可反向破解生成明文,破解难度很大。

因此使用 Bcrypt 进行加密后,攻击者想要使用算出 M2 成本变得不可接受。但代价是应用自身也会性能受到影响,不过登录行为并不是随时在发生,因此能够忍受。对于攻击者来说,需要不断计算,让攻击变得不太可能。

加密:
const bcryptjs = require('bcryptjs') // 导入bcryptjs包

const passwrod = '123456'; // 初始密码
const salt = bcrypt.genSaltSync(10); // 生成盐
const transformPass  = bcryptjs.hashSync(password, salt) // 生成加密密码
快速生成hash值:
const transformPass  = bcryptjs.hashSync("123456", 10) // 快速生成加密密码
密码验证:
bcrypt.compareSync("123456", transformPass); // true 
bcrypt.compareSync("cuowumima", transformPass); // false 

推荐使用bcryptjs,算法要比md5高级

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值