PHP的SHA-256 base64校验和,以匹配Java的校验和


PHP SHA-256 check sum in base64 to match that of Java

我有一个java程序,计算SHA-256校验和如下。例如,如果我提供输入abcd123ABCD00-4000,它输出0QtyIu4B+lU+TLqM/zfJz5ULVpyXgfLRs5mKXCQvbHM=。它也匹配在线校验和计算器。

但是我使用的PHP代码不匹配。

PHP代码:
$s = 'abcd123ABCD00-4000';
$signature = base64_encode(hash_hmac("sha256", $s, True)); 
print  base64_encode($signature); 

输出:TWpRM1pEWXpaVFl4TURoallqTXdPRFV6WVRrNU5XVTRNRGxoWkRJMU1XWTVNREk1TnpBeU4ySXhaR0psTW1ZMk16Y3hPRE01WldFelkySXhOalJrWXc9PQ==

Java Code:

private static String getSHA256Hash(String text) {

    String hash = null;
    MessageDigest md = null;

    try {
      md = MessageDigest.getInstance("SHA-256");
      md.update(text.getBytes("UTF-8"));
      byte[] shaDig = md.digest();
      // hash = Hex.encodeHexString(shaDig);
      hash = Base64.encodeBase64String(shaDig);
    } catch (NoSuchAlgorithmException ex) {

    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    }
    return hash;
  }

输出:0QtyIu4B+lU+TLqM/zfJz5ULVpyXgfLRs5mKXCQvbHM=

这里我想要的是在PHP中获得等效的结果(即更改PHP代码以匹配Java程序的结果[我无法更改Java代码])。

如果您使用hash()和base64编码一次,您将得到相同的结果。

$s = 'abcd123ABCD00-4000';
$signature = base64_encode(hash("sha256", $s, True)); 
print  $signature; // 0QtyIu4B+lU+TLqM/zfJz5ULVpyXgfLRs5mKXCQvbHM=