一、什么是MD5和AES
MD5加密:是一种单向的、不可逆的加密算法,目前是最牢靠的加密算法之一,它对应任何字符串都可以加密成一段唯一的固定长度(16位)的代码。并且相同字符串,加密后也是一样的。
AES加密:高级加密标准,是对称式加密算法,既可以加密,也可以解密,加密和解密使用同一个密钥。使用不同的密钥,加密后也是不一样的。信息接收双方都需事先知道密匙且其密匙是相同的,之后便是对数据进行加解密了。对称加密算法用来对敏感数据等信息进行加密。
二、MD5和AES的使用
MD5: 主要用在项目中的,用户名密码以加密的方式存储在数据库里,防止数据被篡改、防止直接存储明文,保证其安全性。在登录和修改密码中都会用到。
// 根据手机号码和登录密码查找用户
//登录密码需要使用MD5进行加密
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
System.out.println(loginPassword);
System.out.println(HashKit.md5(loginPassword));
User selectUserByPhoneAndPwd = mapper.selectUserByPhoneAndPwd(loginPhoneNumber,HashKit.md5(loginPassword) );
//用户编号
user.setUserId(userId);
//新设置的登录密码(MD5加密)
user.setLoginPassword(HashKit.md5(newPwd));
int row = mapper.updateUser(user);
if(row==1) {
sqlSession.commit();
return true;
}
AES:在项目中,为了方便用户二次登录,我们需要把密码存储在cookie中,并且要在enjoy模板中回显,所以一方面,为了保证保存在cookie中的密码安全,防止泄露,进行加密,另一方面,进行解密存在request中用于模板回显。用到对称式加密。
//保存密码到cookie中
//AES加密:对称式加密(可以加密也可以解密)
//BASE64:编码方式,这里是将加密后的byte[]类型转变成字符串
//加密时:先加密,在编码
//加密 密钥
String pwd = Base64Kit.encode(AesKit.encrypt(user.getLoginPassword(), "abcdabcdabcdabcdabcdabcdabcdabcd"));
setCookie("user_login_phone_pwd", pwd, 60*60*24*30);//设置cookie的生命周期
//处理cookie中的登陆密码
String pwd = inv.getController().getCookie("user_login_phone_pwd");
if(pwd!=null && pwd.length()!=0) {
//解密过程中:先用编码的方式将存到cookie中的String类型转成byte[],再进行解密 密钥
String password = AesKit.decryptToStr(Base64Kit.decode(pwd), "abcdabcdabcdabcdabcdabcdabcdabcd");
//将存到cookie里面的String值放到request中这样可以在页面模板中显示
inv.getController().set("req_user_login_phone_pwd",password);
在进行忘记密码操作时,我们需要发送邮件,并且邮件内容的链接地址要包含用户id,为了安全,在传递过程中对id进行加密显示,然后通过解密,用id修改密码
//2.1对用户编号进行ASE加密
String id = Base64Kit.encode(AesKit.encrypt(String.valueOf(useremail.getUserId()), AEC_KEY));
//2.2重置密码链接
String hostIP = Inet4Address.getLocalHost().getHostAddress();
String url=String.format("http://%s/passport/resetPassword?user_id=%s",hostIP,id );
//2.3邮件内容
String emailContent=String.format("<h1>重新设置密码</h1><h3>点击下方连接</h3><a href='%s'>%s</a>",url,url);
//获取ASE解密后的用户编号
//解决:因Base64编码时‘+’在模板引擎页面输出时,自动被替换为空格
if(id.contains(" ")) {
id=id.replaceAll(" ", "+");
}
int userId = Integer.parseInt(AesKit.decryptToStr(Base64Kit.decode(id),AEC_KEY ));
本文介绍了MD5和AES两种加密算法。MD5为不可逆的单向加密,常用于存储密码以确保安全性;AES是可逆的对称加密,适用于需要解密的数据,如在项目中加密保存在cookie中的密码和加密传输的用户ID。在忘记密码功能中,AES用于加密邮件中的ID,保证信息安全。
683

被折叠的 条评论
为什么被折叠?



