迭代慢hash密码让你的用户更放心

前言

项目中,用户的登录密码怎么保存呢?明文?MD5加密?MD5加盐?其实这些做法都不是很好的选择!原因如下:

  • 明文肯定是不可取的,一旦数据库被“脱裤”了,基本上用户信息就完蛋了
  • 简单的MD5加密安全性上只比明文高一点,为什么呢?只要你有一个MD5加密集,对照数据库里的密文,很容易就能把密码破解出来!常用的手段就是:字典破解、彩虹表
  • MD5加盐,其实就是在生成密码MD5值的时候,随机拼接一个字符串(盐值)。对比解密的时候,将这个盐值也参与计算,从而能将密码的安全性再提高一些。但还是解决不了字典破解的问题。

迭代慢hash

慢哈希,其实就是指执行这个哈希函数非常慢,这样暴力破解需要枚举遍历所有可能结果时,就需要花上非常非常长的时间,但是也只是针对攻击者而言,穷举密码的时候会很慢,有目的的对比其实是很快的。最好对不同用户的密码随机生成不同的salt,salt库和密码库分离开。
下面就给大家具体来实现一把,不能光说不练是吧!!!

首先肯定要修改上次的表结构了,毕竟上次都没有密码这个字段,好尴尬

修改后的表结构

CREATE TABLE `t_user` (
  `userid` varchar(64) COLLATE utf8_bin NOT NULL COMMENT '用户id主键',
  `password` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '登录密码',
  `name` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '姓名',
  `gender` bit(1) NOT NULL COMMENT '性别:0男性 1女性',
  `age` int(11) DEFAULT NULL COMMENT '年龄',
  `createDate` datetime DEFAULT NULL COMMENT '创建时间',
  `role` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '0' COMMENT '角色:0普通用户 1管理员',
  PRIMARY KEY (`userid`),
  UNIQUE KEY `userid_index` (`userid`) USING BTREE COMMENT '用户id索引,方便根据id查询'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

加盐迭代慢Hash工具类

这个我也是在网上找到的(不邀这个功了),不过还是很好用的

package com.zyu.boot.demo.utils.pwd;

import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import java.math.BigInteger;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.spec.InvalidKeySpecException;

/**
 * 迭代慢hash生成密码
 */
public class PasswordHash {
   
    public static final String PBKDF2_ALGORITHM = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值