1.MD5简介
其实严格上来说MD5并不能说是加密算法,只能说是哈希算法。理论上每个字符串都有唯一一个哈希值与之相对应,但是这并不是绝对的,有一定几率会发生冲突,就叫做哈希冲突,这是评价哈希算法好坏的重要指标。
2.不可逆推
理论上使用md5加密过的明文是不可以逆推的,但是却可以使用穷举法,实现穷举出一个字典,在字典中直接使用哈希值进行发查字符串。 我个人觉得完全可以将一段明文进行MD5加密,然后将加密后的信息再进行加密,这样逆推起来就没有那么容易了。
3.加密解密
有网页端的在线加密、 在线解密工具,自行百度使用。
4.项目中的使用
在javaweb项目中,一般对数据 库操作中进行密码的插入操作往往需要对密码进行加密操作。有一些网站设置有找回密码功能感觉他们的数据就是明文的。
5.实例 : 商家注册接口实现
基本逻辑 :
淘宝用户注册成商家,注册时需要获取用户表中的用名 密码进行对比,看是否相同,相同再执行其他操作。获取表单提交的密码,导入apache提供的md5 jar包,然后使用
String changedPswd = DigestUtils.md5Hex(pswd); 对密码进行加密之后再放入数据库。
//商家注册接口 (Mapper->注册)
//MD5是不可逆加密的,所以想判断用户密码是否已经存在(注册),只有将加密过的用户密码取出来,再把商家输入的表单密码拿过来加密比较是否相同。
@RequestMapping(value="businessRegister",method=RequestMethod.POST)
@ResponseBody
public Map<String, Object> register(MultipartFile[] photo, Business business,Integer userId) {
Map<String, Object> map = new HashMap<String, Object>();
User user = userService.findUserByUserId(userId);
//获取用户的账号
String userTelAccount = user.getUserMemberName();
//获取用户的密码
String userPwd = user.getUserPassword();
//MD5加密用户密码
// String changeduserPwd = DigestUtils.md5Hex(userPwd);
//表单提交过来的密码
String pswd = business.getBusinessPassword();
//MD5加密密码
String changedPswd = DigestUtils.md5Hex(pswd);
//set到密码中进行插入数据库操作
business.setBusinessPassword(changedPswd);
//判断用户的用户名跟密码是否与商家的用户名与密码相同 这里是使用用户账号密码
if(userTelAccount.equals(business.getBusinessLoginTel()) && changedPswd.equals(userPwd)){ //用户表中已经对密码进行了加密了,所以这里不需要再进行加密了判断了,直接使用equals进行判断就行了。
for(int i=0;i<photo.length;i++){
String fileName = UUID.randomUUID() + photo[i].getOriginalFilename();
try {
File file = new File(fileName);
photo[i].transferTo(file);
FileCopyUtil.copyFile(fileName);
if(i==0){business.setBusinessIconUrl(ConstantData.UPLOAD_PATH + fileName);}
if(i==1){business.setBusinessCard(ConstantData.UPLOAD_PATH + fileName);}
if(i==2){business.setBusinessIDCardPositiveUrl(ConstantData.UPLOAD_PATH + fileName);}
if(i==3){business.setBusinessIDCardOppositeUrl(ConstantData.UPLOAD_PATH + fileName);}
} catch (IllegalStateException | IOException e) {
e.printStackTrace();
}
}
//将图片路径插入到数据库
int count = businessService.addBusiness(business);
if(count > 0){
map.put("reason", "商家所有图片信息上传成功!");
map.put("resultCode", ConstantData.STATUS_CODE_1);
}else{
map.put("reason", "商家所有图片信息上传失败!");
map.put("resultCode", ConstantData.STATUS_CODE_2);
}
}else{
//用户名密码不匹配
map.put("reason", "用户名或者密码输入错误!");
map.put("resultCode",ConstantData.STATUS_CODE_6);
}
return map;
}