我正在对我们的系统进行增强,还有另一个应用程序已经在进行哈希/ ecryption但是没有人知道使用了什么算法,我们无法访问代码。我必须使用java或javascript为我们的系统进行相同的散列,因为我需要执行搜索,所以我需要传递正确的散列/加密值。我只将样本数据保存在已经散列/加密的其他系统的数据库中。
要散列的示例文本数据:4539780225622033
我需要将其转换为此值:gjfFIfHf1JsVMHbD7lwPaT43rsA=
我找到了这个网站,您必须输入文本,它将使用不同的散列算法生成所有可能的散列值。 http://www.insidepro.com/hashes.php?lang=eng
我在SHA-1下找到了4个结果。我知道如何获得结果1和2,但我不知道如何到达结果3和4.
SHA1结果:
RESULT 1: 99a37385d70a8f383f51f70e148d9a115f1beed5
RESULT 2: maNzhdcKjzg/UfcOFI2aEV8b7tU=
RESULT 3: 8237c521f1dfd49b153076c3ee5c0f693e37aec0
RESULT 4: gjfFIfHf1JsVMHbD7lwPaT43rsA=
我希望你能帮助我。
非常感谢你。
冰
答案 0 :(得分:3)
查看页面底部列出的注释:
[1] - Base64中的哈希
[2] - Unicode中的密码
第三个哈希是通过哈希密码的Unicode版本获得的,第四个是Base64编码版本。
答案 1 :(得分:1)
第一个是原始编码的SHA1。第二个使用UTF-16(Little Endian)编码
你可以通过这样做得到第二个结果,
MessageDigest md = MessageDigest.getInstance("SHA1");
md.update(text.getBytes("utf-16le"));
byte digest[] = md.digest();
// Convert to hex or Base64
答案 2 :(得分:0)
1)我希望您发布的信用卡号码不真实。
2)是否有机会反编译原始加密应用程序?
3)如果没有,如果这是一个严重的加密应用程序,他们将使用没有盐或应用程序的标准算法,则无法保证您将获得与不太可能相同的结果特定的钥匙。如果他们 只使用标准哈希算法并且这是一个严肃的安全应用程序,那么您不希望复制相同的行为。
答案 3 :(得分:0)
我终于从我下载的sha1 javascript实现中找到了我的问题的解决方案。正如我所说,我对这种编码方法不熟悉,所以我不太清楚如何解释这种差异。
我没有使用UTF-8,而是使用了UTF-16le编码:
function str2rstr_utf16le(input) {
var output = "";
for(var i = 0; i < input.length; i++)
output += String.fromCharCode( input.charCodeAt(i) & 0xFF,
(input.charCodeAt(i) >>> 8) & 0xFF);
return output;
}
再次感谢您的快速回复。我将不得不阅读/研究更多关于这个主题的内容。