4

是否可以解密以下代码?下面是我加密字符串值的方法。如果它可以解密,请指导我如何做到这一点,根据我的理解 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;
    }
4

2 回答 2

4

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

祝你好运。MD5 是一个散列,表示从输入到输出的单向变换,不一定是双射变换。众所周知,MD5 很弱,但仅适用于一般冲突,而不适用于选择哈希攻击。您可以尝试每一个可能的输入,直到获得正确的哈希(或冲突),但它的计算成本很高,而且不一定是一个好主意。此外,作为时间-记忆折衷,可以使用预先生成的彩虹表。它们需要很长时间才能生成,但查找速度很快。由于使用它们的争议,我不会提供它们的链接,但您可以自由获取和获取,只要您在您所在司法管辖区的适用法律范围内。这个过程仍然不是一个常规的过程,对于 webapp 或一般应用程序来说也不是最好的主意。

你有没有研究过 AES,它有一个密钥,并且加密,允许用那个密钥解密?

于 2013-09-04T13:42:36.973 回答
1

您无法反转 MD5 算法,您可以做的是寻找冲突并希望您能找到一个。破解 md5 散列的最常见方法是彩虹表,您可以在其中将散列与大量预先计算的散列进行比较,希望找到匹配项。

于 2013-09-04T13:42:28.647 回答