【发布时间】:2017-11-04 23:39:19
【问题描述】:
我正在处理一些 MD5 散列,这些散列已使用下面显示的方法转换为数字序列。鉴于下面的代码和示例哈希,我如何“反转”getString() 方法的效果并将数字序列转换回 MD5 哈希?
例如,encrypt("umadbro"); 返回“1518918615824625494170109603025017352201241”,因为 MD5 哈希是通过 getString() 方法传递的。 “umadbro”的 MD5 哈希是 9759ba9ef6fe5eaa6d3c1efaad34c9f1。我需要一个方法,它接受由getString() 方法修改的一串数字并将其转换为它的 MD5 哈希值。例如:reverseMethod("1518918615824625494170109603025017352201241"); 应该输出“9759ba9ef6fe5eaa6d3c1efaad34c9f1”(输入参数是修改后的数字字符串,输出是原始字符串的 MD5 哈希)。 注意:我不是在寻找破解 MD5 哈希的方法。我只需要一个反转下面所示getString() 方法效果的方法。
public String encrypt(String source)
{
try
{
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] bytes = md.digest(source.getBytes());
return getString(bytes);
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
private String getString(byte[] bytes) //this takes an md5 hash and turns it into a string of numbers.
// How can I reverse the effect of this method?
{
StringBuffer sb = new StringBuffer();
for (int i = 0; i < bytes.length; i++)
{
byte b = bytes[i];
sb.append(0xFF & b);
}
return sb.toString();
}
【问题讨论】:
-
不确定这是否可能,因为不同的哈希值将具有相同的表示。例如。作为 getString 的结果,“97”、“0133”、“0F01”和“010501”都会有“151”。如果数字之间有分隔符,那就没问题了
标签: java hash cryptography md5 cryptographic-hash-function