MD5 加盐加密

摘要:
然而,一般的加密算法是固定的,容易破解,安全系数低。据我所知,许多网站可以直接破解密文。为了提高安全性,可以添加盐。生成一组随机字符串,将它们保存在数据库中,然后将它们混合在原始密码中。然后使用加密算法对它们进行加密,并将它们保存在数据库中(表3)。但既然可以获得,前端加密算法也被曝光了,所以感觉就像什么都不做。

一、概述

  MD5(Message Digest  Algorithm 5),是一种散列算法,是不可逆的,即通过md5加密之后没办法得到原文,没有解密算法。

  在一般的项目中都会有登录注册功能,最简单的,登录注册过程完全没有加密,存储在数据库的密码也是明文,安全性是很差的,万一数据泄露就不好了(表一)。所以,通过MD5将密码加密后保存在数据库中(表二),在登录的过程中后端将从前端获取到的密码加密,对照数据库中已经加密的密码。

  但是一般加密算法固定,很容易破解,安全系数低,就我所知,有很多网站可以直接破解密文。为了提高安全性,可以采取加盐的方式。生成一组随机串,保存在数据库中,然后混杂在原来的密码中,再通过加密算法加密,存进数据库中(表三)。

                            MD5 加盐加密第1张

                       表一

        MD5 加盐加密第2张

                     表二

        MD5 加盐加密第3张

                     表三

   至于MD5加密算法的底层原理,参考这篇博客:https://blog.csdn.net/sinat_27933301/article/details/79538169

二、代码实现

  Java有挺多关于MD5加密的方法,这里就用Spring中的 DigestUtils.md5DigestAsHex() 实现。

public class MD5Util {
    public String passwordEncryptor(String password){
        return DigestUtils.md5DigestAsHex(password.getBytes());
    }
}

  从前端获取用户输入的用户名,查找数据库中的 salt,并混在用户输入的密码中,这里我直接把 salt 加在后面

// 省略很多代码,包括查找数据库的代码
String username = request.getParameter("username");
String password = request.getParameter("password");
String salt = impUserService.findSalt(username);
String mdPassword = md5Util.passwordEncryptor(password + salt);
User user = impUserService.find(username, mdPassword);

三、其他的问题

  用户登录时的密码需要在前端用js加密后再提交吗?

  我个人想法,应该是不用的。可能觉得前端明文传输给后端的话,过程中如果能被人截取到,那不是挺危险的。但是既然能获取,那前端的加密算法也暴露了,所以感觉像是做无用功。当然这只是我个人想法,有知道的或者有其他想法的大佬跟我说一下哈哈哈。

免责声明:文章转载自《MD5 加盐加密》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇parallel desktop ubuntu从18.04更新到20.04(包括安装Parallels Tools)三端稳压器各个参数解释下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

136-如何访问redis数据库

//当我们使用Redis的时候,并没有注入Mapper,反而时注入了一个redisTemPlate @Autowired private RedisTemplate<Object,Object> redisTemplate; @Override public Integer queryUserCount() {...

linux下,达梦数据库8 备份还原

  一 数据库备份相关概念 备份就是数据库在某一个时间点的副本 数据库备份目的:防止数据丢失,防止天灾人祸(地震、火灾、人为操作、硬件故障) 备份主要有物理备份和逻辑备份 物理备份主要是备份使用过的有效的数据页,逻辑备份主要是备份数据库对象(表,索引,视图,存储过程等) 物理备份:分为联机备份和脱机备份;完全备份和增量备份 完全备份:备份的是整个数据库或者...

[渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:MVC程序中实体框架的Code First迁移和部署

这是微软官方SignalR 2.0教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第五篇:MVC程序中实体框架的Code First迁移和部署 原文:Code First Migrations and Deployment with the Entity F...

MySQL用户权限验证与管理方法详解

本文实例讲述了MySQL用户权限验证与管理方法。分享给大家供大家参考,具体如下: 一、Mysql权限分两阶段验证 1. 服务器检查是否允许连接:用户名、密码,主机地址。 2. 检查每一个请求是否有权限实施。 二、Mysql权限列表 权限 权限级别 权限说明 create 数据库、表或索引 创建数据库、表或索引权限 drop 数据库或表 删除数据...

禁用wordpress自动保存为草稿

wordpress有个很讨厌的功能,叫Post Revisions,保存博文日志的不同版本,同样的内容多次占用数据库,多人用户维护一个blog用这个有用处,单一维护的blog基本是数据库浪费空间。禁用Post Revisions的方法是,在wp-config.php文件中增加一行 define(‘WP_POST_REVISIONS’, false); 那么...

MD5加密解密以及设置salt(盐值)

MD5算法 package com.oracle.jsp.util; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; /** * * @author wjxing * */ public class MD5 {...