【发布时间】:2011-06-23 15:57:41
【问题描述】:
我有一个示例应用程序,它在 PHP 中生成一个 SHA1 哈希,如下所示。
base64_encode(pack('H*', sha1($pass)));
我尝试在 Java 中实现相同的功能,但到目前为止,输出有所不同。我使用的方法如下(Base64和Hex类来自commons-codec库)。
byte[] rawSHA = null;
byte[] base64HexSHA = null;
String hex = null;
MessageDigest md= null;
// Get Message Digest Instance.
try {
md = MessageDigest.getInstance(SHA1_ALGORITHM);
} catch (NoSuchAlgorithmException e) {
LOG.error("Unable to load SHA-1 Message Digest : " + e.getMessage(), e);
throw new IllegalStateException("SHA-1 Message Digest Instance Not Found");
}
// Build SHA1 Hash
rawSHA = md.digest(rawText.getBytes("UTF-8"));
// Convert to HEX
hex = new String(Hex.encodeHex(rawSHA));
// Encode to Base 64
base64HexSHA = Base64.encodeBase64(hex.getBytes("UTF-8"));
// Return String
return new String(base64HexSHA);
我的问题是,我采用的方法会产生与 PHP 的 pack() 函数相同的输出吗?我的猜测是 PHP pack() 函数返回原始字节,其中 Hex.encodeHex 返回十六进制字符串形式(参考:http://www.w3schools.com/php/func_misc_pack.asp)。
如何在 Java 中实现与 PHP 的 pack() 函数相同的输出(或上述 PHP 代码的完整输出)?
【问题讨论】:
标签: java php sha1 pack message-digest