比较 Java 和 PHP 中的 SHA256 输出

米歇尔

这个问题可能是重复的。但到目前为止,我还没有看到任何可以解决我的问题的回应。我有这段 Java 代码进行加密SHA-256

public static String hashIt(String msg, String key) {

    MessageDigest m = null;
    String hashText = null;
    byte[] actualKeyBytes =  TripleDES.hexStringToBytes(key);
    try {
        m = MessageDigest.getInstance("SHA-256");
        m.update(actualKeyBytes, 0, actualKeyBytes.length);
        try {
            m.update(msg.getBytes("UTF-8"), 0, msg.length());
        } catch (UnsupportedEncodingException ex) {

        }
        hashText = TripleDES.bytesToHexString( m.digest() ); //new BigInteger(1, m.digest()).toString(16);

    } catch (NoSuchAlgorithmException ex) {

    }
    return hashText;
}

使用d38a5cd5作为键和"ewo10kalavanda"作为要散列的字符串。

Utils.hashIt("ewo10kalavanda", "d38a5cd5");

我有以下输出:

fc87c73012e11de3a57faabe4d852ce89ec3337504531c16

使用相同SHA256PHP

hash_hmac('SHA256', "ewo10kalavanda", "d38a5cd5", $raw=false)

输出1839412f79b9e33c2f810650f79f23f46173792f885dd8d8c9633675e28e792f与 Java 不匹配。

这里有什么地方做错了吗?已经在这几个小时了。

马丁·博德威斯

来自glee8e另一个答案应该会让你走得很远。但可以肯定的是,这里是如何生成输出:

$k = hex2bin("d38a5cd5");
$m = "ewo10kalavanda";
$in = $k.$m;
$h = hash ("SHA256", $in);
print $h;

最好先编码为 UTF-8,但我没有安装正确的模块:

$m = mb_convert_encoding("ewo10kalavanda", "UTF-8");

对于测试刺,这当然无关紧要,只要平台编码与输入字符的 UTF-8 兼容。


然而,这只是答案的一半:定义 HMAC 是有原因的,主要原因是散列函数本身对于密钥散列或消息身份验证代码 (MAC) 并不那么安全。所以在 PHP 函数中使用 HMAC 应该是首选。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SHA256:Swift 和 Java 中的不同输出?

PHP 中的 HMAC sha256 不以十六进制和破折号 (-) 返回输出

Java SHA256向PHP SHA256输出不同的哈希吗?

Go和PHP中的SHA256提供不同的结果

目标C和Java中的Sha256哈希

比较用PHP hash()和NodeJS crypto.createHash()制成的SHA256

为什么我的Java和命令行SHA256输出不同?

Android Java和PHP HASH HMAC SHA256不同的结果

如何在java中为自定义sha256轮重现php Crypt()

Java Mac sha256哈希与使用包的PHP hmac sha256不匹配?

OpenSSL和PHP SHA256摘要不同

OpenSSL和Java产生不同的SHA256 RSA签名

使用sha256和salt进行Java加密

Python和JavaScript中的HMAC SHA256

通过 SHA256 哈希比较目录(和子文件夹)中的所有文件。记录(到文件)并删除重复项

PHP 和 Java 中不同输出的舍入

Java和Python生成不同的Hmac-SHA256输出

nodejs crypto和CryptoJS提供不同的base64(sha256(data))输出

Node js与Python中的一种方式sha256哈希之间的比较

SHA256和HMACSHA256函数中的Vba Excel“自动化错误”

sha256与PHP会话

二进制输出在哈希SHA256中不同

Java中的HMAC-SHA256产生的输出与JavaScript不同

SHA256哈希从OpenSSL和Sha256Sum实用程序Java不同产生。为什么?

如何在Swift 2和3中使用通用加密和/或计算sha256

hmac sha256 输出长度

为什么HMAC sha256在PHP和Javascript上返回不同的值

为什么在C ++和PHP SHA256哈希之间得到不同的结果?

在 php 中使用 SHA256 hmac 生成散列消息(密鑰和 msg 是假的)