MD5算法在java中解密

时间:2013-09-04 13:39:24

标签: java algorithm encryption md5

是否可以解密以下代码?下面是我加密String值的方法。如果它是可解密的,请指导我如何做到这一点,根据我的理解MD5算法不能解密,但现在我的工作是找到解密它的方法。请提供您宝贵的意见,以完成它。

public static String encryptPassword(final String password) {
        if (MyUtil.isEmpty(password)) {
            return null;
        }
        MessageDigest digest;
        try {
            digest = MessageDigest.getInstance("MD5");
            digest.update(password.getBytes(), 0, password.length());
            String secured = new BigInteger(1, digest.digest()).toString(16);
            return secured;
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return null;
    }

2 个答案:

答案 0 :(得分:4)

  

但是现在我的工作是找到解密它的方法

祝你好运。 MD5是一个散列,这意味着从输入到输出的单向,不一定是双射变换。已知MD5较弱但仅适用于一般冲突,而不适用于选择哈希攻击。您可以尝试每一个可能的输入,直到您获得正确的哈希(或冲突),但它的计算成本很高,并不一定是个好主意。另外,作为时间 - 存储器权衡,可以使用预先生成的彩虹表。它们需要很长时间才能生成,但具有快速查找功能。由于使用它们的争议,我不会提供链接,但只要您符合您所在司法辖区的适用法律,您就可以自由获得并获得一个链接。这个过程仍然不是常规过程,对于Web应用程序或一般应用程序来说并不是最好的主意。

你有没有看过AES,它有一个密钥,并加密,允许用该密钥解密?

答案 1 :(得分:1)

你不能反转MD5算法,你可以做的就是寻找碰撞并希望你找到一个。破解md5哈希的最常见方法是rainbow tables,您可以将哈希与希望找到匹配的大量预先计算的哈希值进行比较。