簡體   English   中英

如何在PHP中重現Java MessageDigest SHA-256哈希?

[英]How to reproduce java MessageDigest SHA-256 hash in PHP?

目前,我已獲得以下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());
        }
    }
}

輸出是:

計算值: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;

這里的輸出完全不同:

計算值: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);

輸出:

計算值:bfiUcT46ftaC76MCbGbpCFisFSlEY96 / 4CBwdtznaCE =

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM