MD5和AES在项目中的使用方式与区别

本文介绍了MD5和AES两种加密算法。MD5为不可逆的单向加密,常用于存储密码以确保安全性;AES是可逆的对称加密,适用于需要解密的数据,如在项目中加密保存在cookie中的密码和加密传输的用户ID。在忘记密码功能中,AES用于加密邮件中的ID,保证信息安全。

一、什么是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 ));

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值