java中的原始SHA1与PHP

时间:2017-07-31 11:09:20

标签: java php sha

我已经在SO中检查了类似的问题,但没有一个可以回答我的问题,所以在这里发布我的问题。 在我的代码中进行第三方API调用之前,我需要为密码生成原始SHA。 我正在使用apache编解码器库中的DigestUtils。以下是java代码

public static String sha1 (String input) 
    throws NoSuchAlgorithmException, 
        UnsupportedEncodingException {

    return new String(DigestUtils.sha(input));
}
// I suppose this gives me raw SHA. 

PHP代码(我在google中)位于

之下
$passwordSha = sha1($password, true);

// The boolean value gives the SHA in binary format.

对于输入“PASSWORD”,以下是输出

JAVA : "+��0G���i.)�\�I�_�7"
PHP  : "+��0G���i.)�\�I�_�7"

我不确定是否正确比较这些垃圾值但是,我生成的最终密码摘要(取决于上面的代码)在PHP和JAVA中是不同的。 (在PHP中获得正确的价值)。

请帮助我了解在PHP和JAVA中生成原始SHA1的区别。

更新

编辑输出。我的不好..

针对不同输入的更多结果

输入:“secretnonce101112015-09-30T14:12:15Z a ` t . ^X ”

JAVA:“ s A M ; *”

PHP:“ i> рq ”

我在java输出中看到一些额外的字符。不确定这是否会破坏我的最终密码摘要。

2 个答案:

答案 0 :(得分:0)

我不知道你是否会以某种方式将类型转换中的东西丢失为String,但是你可以尝试以下方法并比较输出吗?这应该表示为十六进制字符串。

public static String sha1 (String input) 
    throws NoSuchAlgorithmException, 
        UnsupportedEncodingException {

    return DigestUtils.sha1Hex(input);
}

VS

$passwordSha = sha1($password, false);

答案 1 :(得分:0)

在转换为String时使用ISO-8859-1编码后,我得到了正确的输出。

所以String应该用ISO-8859-1编码转换为byte []

byte [] passwordSha = sha(input.getBytes(" ISO-8859-1"));

这对我有用.. 为此提到了PHP and Java hmac hash output matches in hex, doesn't match in raw binary. What's happening?