Java等价于PHP的pack函数

我有一个示例应用程序,它在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代码的完整输出)?

解决方法:

不需要转换为十六进制,只需使用以下命令:

base64HexSHA = Base64.encodeBase64(rawSHA);
上一篇:HDU_2044——蜜蜂走蜂房,递推


下一篇:GCC 内存对其选项、警告、其他方式对其