MD5加强加密实现

关于MD5加密,简单来说没事可以起到加密数据的效果的,但是网上层出不穷的MD5在线破解.....,索性找到了一个可以防止MD5破解的小道,接下来就为大家分享下这个思路以及源码。


我们主要模拟用户的注册和登录加密传输密码部分

注册

用户将明文密码上传到服务器,经由服务器转换后,传给前台一个加密后的MD5值

登录

用户将加密过的密码字符串在指定位置添加自定义的字符,发送给后台,后台再次在某个位置,加入自定义字符,返回给前台,用户使用两次打乱过的字符串密码进行登录。后台接收到字符串后,替换掉指定的字符,解出原来的MD5值,和数据库进行匹配,匹配成功,进行登录,否则拒绝登录。

代码部分

前台加密部分,在前台部分加密,将加密的字符串发送到后台。

replaceStr(passwordMD5){   //对用户的密码进行加密处理,回传给后台的时候进行,逆向获取密码值然后进行规则匹配,存储密码
  var substr = passwordMD5+"";
  var a = substr.substring(0,5);//前五位
  var ax = substr.substring(5,6)//获取第六个的数值
  var b = substr.substring(6,14);//6-15位
  var bx =  substr.substring(14,15)//获取第15个的数值
  var c = substr.substring(15,21)//获取第16-21个的数值
  var cx = substr.substring(21,22)//获取第22个的数值
  var d = substr.substring(22)//获取第22位之后的所有数值
  var md5back = a+"s"+b+"t"+c+"a"+d;//我是处理后的字符串
  var md5my = ax+bx+cx;
  this.md5back = md5back;
  this.md5ReCode = md5my;
}

后台加密部分,将前台发来的字符串再次进行加密,然后回传给前台,前台利用这个字符串进行登录。

@CrossOrigin
@GetMapping("md5Produce")
public Map<String, Object> produce(
        @RequestParam("md5Str") String md5Str,
        @RequestParam("reCodeMd5") String reCodeMd5
){//获取到字符串,处理后返回
    try{
        String abc = md5Str.substring(0,7) + "r" + md5Str.substring(8,18) + "b" +md5Str.substring(19,26)+"t"+ md5Str.substring(27);//更改后的加密字符
        String def = md5Str.substring(7,8)+ md5Str.substring(18,19) +md5Str.substring(26,27);//更改后的加密字符
        String ghi = reCodeMd5 + abc + def;//将加密后的字符和加密用到的字符串一并返回出去
        if(ghi != null){
            return WebResult.success().put("dataVo",ghi).toMap();//返回的是加密之后并且被乱码的md5值
        }
    }catch(Exception e){
      LOGGER.error(e.getMessage(),e);
      return WebResult.failure("执行失败,请稍后重试!").toMap();
    }
    return WebResult.failure("执行失败,请稍后重试!").toMap();
}

后台登录解密部分,在这里进行加密后的密码解密部分,然后使用解密到的MD5值匹配登录。

后台(解密方法)
/**
 * 获取登录的md5值,然后恢复md5值进行判断
 * @param loginMd5
 * @return
 */
@GetMapping("loginUser")
              public Map<String, Object> loginInfo(
                      @RequestParam("loginMd5") String loginMd5
              ){
                try{
                    /*首先截取需要是哟哦哦那个到的原本字符,然后进行替换*/
                    String head3 = loginMd5.substring(0,3);//前三位
                    String foot3 = loginMd5.substring(35);//后三位
                    String bodyCon = loginMd5.substring(3,35);//主要部分内容(32位加密字符)
                    String head3Pj = bodyCon.substring(0,5) + head3.substring(0,1) + bodyCon.substring(6,14) + head3.substring(1,2) + bodyCon.substring(15,21) +  head3.substring(2,3) + bodyCon.substring(22);
                    String footPj =  head3Pj.substring(0,7) +foot3.substring(0,1) + head3Pj.substring(8,18) + foot3.substring(1,2) +head3Pj.substring(19,26)+foot3.substring(2,3)+ head3Pj.substring(27);
                    String Result = footPj;//这是经过一波三折后来到的md5值,可以被直接破解的那种

                }catch(Exception e){
                    LOGGER.error(e.getMessage()+"登录的md5值出现问题",e);
                    return WebResult.failure("操作失败,请稍后重试").toMap();
                }
                  return null;
              }
原文地址:https://www.cnblogs.com/nanstar/p/12572268.html