0
我目前已經給出了以下java代碼片段作爲如何基於提供的'in'和'salt'變量計算哈希的例子。在這些例子中,變量是硬編碼來進行測試:如何在PHP中重現java MessageDigest SHA-256哈希值?
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
我已經嘗試了一些變化,但不打標記。有什麼我在這裏失蹤?任何幫助將不勝感激。
啊,謝謝!你是冠軍。我實際上已經嘗試過使用bae64_encode(),但仍然得到錯誤的結果 - 但是我看到我錯過了hash()函數的第三個參數。 – Manachi
是的,沒有第三個參數,PHP會對結果做一些自己的後處理。 – apokryfos