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

目录

        一、什么是MD5加密和AES加密

        二、使用MD5加密

        三、使用AES加密

总结


一、什么是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中,又要解密后能够显示到页面上,就需要用到对称加密。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值