java - 如何在 PHP 中重现 java MessageDigest SHA-256 哈希?

标签 java php security hash sha256

我目前得到了以下 java 代码片段作为如何根据提供的“in”和“salt”变量计算哈希值的示例。在这些示例中,变量被硬编码以供测试:

package generatehash;

import java.security.MessageDigest;
import sun.misc.BASE64Encoder;

public class GenerateHash {

    public static void main(String[] args) 
    {
        String in = "abcdef12345";
        String salt = "test1";
        try {
            MessageDigest hash = MessageDigest.getInstance("SHA-256");
            byte[] digest = hash.digest((in + salt).getBytes());
            String out = new BASE64Encoder().encode(digest);
            System.out.println("Calculated: " + out);
        } catch(java.security.NoSuchAlgorithmException e) {
            System.err.println("SHA-256 is not a valid message digest algorithm. " + e.toString());
        }
    }
}

这里的输出是:

Calculated: bfiUcT46ftaC76MCbGbpCFisFSlEY96/4CBwdtznaCE=

当尝试运行 PHP 等效项时,我尝试了以下操作:

<?php
ini_set('display_errors','On');
error_reporting(E_ALL);

$in = 'abcdef12345';
$salt = 'test1';

$out = hash('sha256', $in.$salt);

echo 'Calculated: ' . $out;

这里的输出完全不同:

Calculated: 6df894713e3a7ed682efa3026c66e90858ac15294463debfe0207076dce76821

我尝试了多种变体,但没有达到目标。我在这里缺少什么吗?任何帮助将不胜感激。

最佳答案

Java 结果为 base64,而 php 结果为十六进制。您错过了对原始 PHP 结果进行 Base64 编码的步骤。

$in = 'abcdef12345';
$salt = 'test1';

$out = hash('sha256', $in.$salt,true); //3rd parameter says return raw result
echo 'Calculated: ' . base64_encode($out);

输出:

Calculated: bfiUcT46ftaC76MCbGbpCFisFSlEY96/4CBwdtznaCE=

示例: http://sandbox.onlinephpfunctions.com/code/bb12ed98c16e2b732f29292da75aeebc36da2d48

关于java - 如何在 PHP 中重现 java MessageDigest SHA-256 哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44963287/

相关文章:

PHP 日期时间 DST

java - 从 Java Webstart 启动嵌入式 Tomcat 时出现 AccessControlException

Java bean 验证正则表达式摆脱 CSV 注入(inject)

java - Apache Shiro 和新手 Java 安全

Java使用单独的任务异步同步两个集合中的项目

java - Hadoop - 如何从 mapred.JobConf 中提取 taskId?

java 方法不适用于参数(接口(interface))

php - 简单 'SELECT field FROM table_name where TO = "$to"' 返回 MySQL 错误 1064

php - 尝试在 PHP/Apache 中执行 exec ("unix2dos xxx"时出现问题

java - 骑士之旅 - 导致无限循环,我不明白为什么