API安全(六)-密码加密
2021-01-15 18:13
标签:shp 常见 修改密码 数据 salt 依赖 邮箱 color vat 存在数据库中的密码如果是明文,一旦数据库数据泄漏了,别人就可以拿着你的账号密码为所欲为。更何况有很多人在各个平台的用户名密码都是一致的。所以用户的密码,一定要加密存储。 2.1、对称加密,指的是需要对加密和解密使用相同密钥的加密算法。常见的对称加密算法有:DES、3DES、AES等。 2.2、非对称加密,它需要两个密钥,一个称为公钥(public key),一个称为私钥(private key)。加密和解密使用两个不同的密钥。例如:甲生成一对密钥,并将其中的一把作为公钥向其他人公开,得到该公钥的乙使用该密钥对信息进行加密后在发送给甲,甲使用自己保存的另一把私钥,对加密后的信息进行解密。常见的非对称加密算法有RSA、DSA等。 2.3、单向hash算法,就是把任意长的消息串转化为固定长度的输出串的一种算法。一般用户信息摘要。常见的有MD5、SHA、MAC等。 2.4、加盐hash算法,盐(Salt),在密码学中,是指在散列之前将散列内容(例如:密码)的任意固定位置插入特定的字符串。这个在散列中加入字符串的方式称为“加盐”。其作用是让加盐后的散列结果和没有加盐的结果不相同,在不同的应用情景中,这个处理可以增加额外的安全性。 3.1、可逆的算法不要选,会增加密码泄漏的风险。 3.2、MD5不要选,MD5并不是一个加密算法,而是一个信息摘要算法,可通过彩虹表进行破解,且相同明文加密后的密文是一致的,一旦破解出来一个,其余相同的也都知道了。 3.3、不要加固定的盐,比如说用户名,邮箱等,如果数据库被攻破了,盐会被拿到。一旦盐泄漏,根据盐重新建立彩虹表可以进行破解。 所以用于密码加密的算法最好是,不可逆的,且使用随机盐,常用做密码加密的算法有bcrypt、scrypt。 4.1、导入依赖 4.2、对密码进行加密 4.3、认证过滤器,修改密码校验方式 4.4、创建两个用户,并使用相同的密码123456,查看数据库中存储的密码是不一致的 4.5、测试认证功能 这样,我们数据库中的密码就安全多了。 5.1、导入依赖 5.2、对密码进行加密 5.3、认证过滤器,修改密码校验方式
效果与使用bcrypt类似,该算法唯一的缺点就是慢。 源码地址:https://github.com/caofanqi/study-security/tree/dev-encryption API安全(六)-密码加密 标签:shp 常见 修改密码 数据 salt 依赖 邮箱 color vat 原文地址:https://www.cnblogs.com/caofanqi/p/12238269.html1、密码为什么要加密
2、加密算法的种类
3、密码加密的算法选择
4、使用bcrypt对密码进行加密(推荐使用)
@Override
@Transactional(rollbackFor = Exception.class)
public UserDTO create(UserDTO userDTO) {
/*
* 将密码加密成密文
*/
userDTO.setPassword(BCrypt.hashpw(userDTO.getPassword(),BCrypt.gensalt()));
UserDO userDO = new UserDO();
BeanUtils.copyProperties(userDTO, userDO);
userRepository.save(userDO);
userDTO.setId(userDO.getId());
return userDTO;
}
5、使用scrypt对密码进行加密
userDTO.setPassword(SCryptUtil.scrypt(userDTO.getPassword(),2