是否可以解密以下代码?下面是我加密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;
}
答案 0 :(得分:4)
祝你好运。 MD5是一个散列,这意味着从输入到输出的单向,不一定是双射变换。已知MD5较弱但仅适用于一般冲突,而不适用于选择哈希攻击。您可以尝试每一个可能的输入,直到您获得正确的哈希(或冲突),但它的计算成本很高,并不一定是个好主意。另外,作为时间 - 存储器权衡,可以使用预先生成的彩虹表。它们需要很长时间才能生成,但具有快速查找功能。由于使用它们的争议,我不会提供链接,但只要您符合您所在司法辖区的适用法律,您就可以自由获得并获得一个链接。这个过程仍然不是常规过程,对于Web应用程序或一般应用程序来说并不是最好的主意。但是现在我的工作是找到解密它的方法
你有没有看过AES,它有一个密钥,并加密,允许用该密钥解密?
答案 1 :(得分:1)
你不能反转MD5算法,你可以做的就是寻找碰撞并希望你找到一个。破解md5哈希的最常见方法是rainbow tables,您可以将哈希与希望找到匹配的大量预先计算的哈希值进行比较。