Java-эквивалент для PHP-функции pack - PullRequest
3 голосов
/ 23 июня 2011

У меня есть пример приложения, которое генерирует хэш SHA1 в PHP следующим образом.

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 возвращает форму шестнадцатеричной строки (ref: http://www.w3schools.com/php/func_misc_pack.asp).

Как мне получить тот же вывод, что и функцию PHP pack () в Java(или полный вывод приведенного выше кода PHP)?

1 Ответ

3 голосов
/ 23 июня 2011

Преобразование в HEX не требуется, просто используйте это:

base64HexSHA = Base64.encodeBase64(rawSHA);
...