我有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代码:
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=