使用SHA1散列

时间:2010-07-05 04:02:22

标签: java javascript hash sha1

我正在对我们的系统进行增强,还有另一个应用程序已经在进行哈希/ 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=

我希望你能帮助我。

非常感谢你。

4 个答案:

答案 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;
}

再次感谢您的快速回复。我将不得不阅读/研究更多关于这个主题的内容。