专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

还在用md5加密吗?模拟下暴力破解md5

ins518 2024-09-27 09:24:31 技术文章 13 ℃ 0 评论

前言

我们都知道md5加密是不可逆,刚工作那会我也认为md5加密因为不可逆,所以是安全的,今天就模拟下暴力“破解”md5,仅仅为了学习。整个流程如下图,本文重点

  • md5加密工具类
  • 生成密码组合算法

前提假设

假设我们已经知道了密码的格式是字母(仅仅演示,密码格式复杂生成组合非常耗时), 简单起见我们已经知道了密码长度N。letters则是密码允许的字符,我们需要生成其所有组合

private final static String letters = "0123456789";


生成密码组合

话不多说直接放码过来,该方法用于生成指定位密码组合,生成密码组合可能比较耗时,不过这个一劳永逸的工作。

    private static Set<String> backtrack(String letters, int num) {


        Set<String> resultList = new HashSet<>();
        if (num == 1) {
            for (int i = 0; i < letters.length(); i++) {
                resultList.add("" + letters.charAt(i));
            }
            return resultList;
        }


        for (int i = 0; i < letters.length(); i++) {
            resultList.add("" + letters.charAt(i));
        }


        int size = 1;
        while (size < num) {
            Set<String> tempList = new HashSet<>();
            for (String item : resultList) {
                for (int i = 0; i < letters.length(); i++) {
                    char ch = letters.charAt(i);
                    for (int j = 0; j < item.length(); j++) {
                        String prefix = j == 0 ? "" : item.substring(0, j);
                        tempList.add(prefix + ch + item.substring(j));
                    }
                }
            }
            resultList.clear();
            resultList.addAll(tempList);
            size++;
        }




        return resultList;
    }

缓存所有组合密码与加密密文

下面就简单了,循环遍历所有组合,计算md5值,并将映射关系保存,这里简单演示,就直接存入Map中

    public static void initCache() {
        int passwordNum = 6;
        Set<String> strs = backtrack(letters, passwordNum);
        for (String str : strs) {
            md5Map.put(Md5Util.getMd5Hash(str), str);
        }
    }

接下来解密直接从Map中获取即可

  public static String getSourceString(String md5Hash){
      return md5Map.get(md5Hash);
  }

赶紧试试效果,成功解析出明文123435

System.out.println(Md5Cache.getSourceString("d62129ba57e53adea5189ce35e676842"));

问题来了

除了提升密码长度和密码复杂度,有什么改进的方法提升md5加密的安全性呢

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表