目录
一、什么是MD5加密和AES加密
MD5是一种单向加密,它的加密不可逆,它将任意长度的字符串,经过算法计算后生成固定长度的数据,一般为16位表示 。这种加密方式最简单同时也最直接
密钥是AES算法实现加密和解密的根本。对称加密算法之所以对称,因为我们可以使用一个密钥进行加密,同时也可以使用这个密钥进行解密。
二、使用MD5加密
1、使用MD5加密主要解决了当我们用户存储密码时,防止在数据中显示的为明文所以为了保证密码的安全性,我们使用MD5算法,当用户登录时,我们会对数据中中的信息进行匹配,所以我们要用用户输入的密码先进行加密,然后再去数据库中查。
具体操作:
UserMapper umapper = sqlSession.getMapper(UserMapper.class);
// 使用Hashkit的md5加密
System.out.println("加密前的密码:" + loginPassword);
System.out.println("加密后的密码:" + HashKit.md5(loginPassword));
User user=umapper.selectUserByPhoneAndPwd(loginPhoneNumber,HashKit.md5(loginPassword));
2、当用户忘记密码,需要对密码进行修改时,我们也会将用户输入的新密码进行加密之后存入到数据中
具体操作:
user.setUserId(userid);
// 再用md5进行加密
user.setLoginPassword(HashKit.md5(newPwd));
int ret = umapper.updateUser(user);
if (ret >= 0) {
sqlSession.commit();
return true;
}
return false;
三、使用AES加密
因为我们的密码时加密的,我们想要的功能是,用户第一次登录之后,我们可以将信息存储到cookie中,cookie数据浏览器端,所以我们存储在cookie中的值必须是要通过加密,否则也会导致密码的泄露,但是我们存储在cookie中时加密之后的,我们又需要将加密之后的解密出来能够显示在页面中,所以我们就需要到对称加密的方法,能够使用密钥来进行加和解密。
加密存储到cookie中:
String pwd=Base64Kit.encode(AesKit.encrypt(user.getLoginPassword(),
"aaaaadddddddaabbbbbbcccccccddddd")); //密钥
setCookie("login_user_pwd", pwd, 60 * 60 * 24 * 30); //存储数据并设置cookie的声明周期
存储在cookie中的值,我们在enjoy模板引擎里面是不能直接取到的,所以我们需要用到拦截器,将cookie中的值,进行解密之后存储到request中。
if (login_pwd != null && login_pwd.length() != 0) {
String login_password = AesKit.decryptToStr(Base64Kit.decode(login_pwd),
"aaaaadddddddaabbbbbbcccccccddddd"); //密钥
System.out.println("解密前:" + login_pwd);
System.out.println("解密后:" + login_password);
//存储到request中
inv.getController().set("login_password", login_password);
}
2、我们在进行忘记密码操作时,我们的做法是将我们修改的链接发送到用户邮箱,邮箱的链接中会带着用户的ID,所以我们要做的是对用户的ID进行加密显示,让用户输入需要修改的内容,然后再解密出来,执行更新操作
// 32位长度秘钥
private static final String AEC_KEY = "1234567890abcdef1234567890abcdef";
// 对用户ID进行加密
String userId = Base64Kit.encode(AesKit.encrypt(String.valueOf(user.getUserId()),AEC_KEY));
// 将ID进行解密
int userid = Integer.parseInt(AesKit.decryptToStr(Base64Kit.decode(id), AEC_KEY));
总结
在我们项目中我们要根据实际情况来选择我们的加密方式,用于传递用户账户信息和密码到MySQL数据库,将密码进行加密后,服务器拿到后直接将其存入数据库,下次登录只需与服务器的密文进行对比即可,这样就保护了用户的信息,即便是后台人员也无法获取用户的账户密码。使用AES加密就方便了我们像是数据回显的这种操作,需要加密后显示到cookie中,又要解密后能够显示到页面上,就需要用到对称加密。