Неожиданный вывод кеккака

Я экспериментирую с различными реализациями Keccak для Java. Эта реализация является наиболее многообещающей, но я получаю странные результаты. Тестовые случаи определены здесь (хотя я использую шестнадцатеричные строки напрямую, согласно тестовым векторам). Текущие (и правильные) тестовые векторы определены здесь зеленым цветом (для удобства я предоставляю ссылку, чтобы никому не пришлось скачивать официальный zip-файл тестового вектора с веб-сайта).

Для начала, я не понимаю корреляции между полями 'len' и 'msg' в тестовых векторах. "Len" должен быть длиной "msg" в битах. Например, 'len' = 5, 'msg' = "48" (шестнадцатеричная строка), я подумал, что 2 шестнадцатеричные цифры = 1 байт, что = 8 бит. Что мне не хватает?

Я получаю только правильные дайджесты (согласно тестовым векторам) для входов следующих длин: 16, 24, 40, 56, 64, 72, 112 и 128 (где длина соответствует полю 'len' в тестовые векторы, и вход "msg"). Однако значения, которые я получаю для длин: 32, 48, 80, 88, 96, 104, не соответствуют тестовым векторам. Может ли кто-нибудь сделать обоснованное предположение о том, почему это происходит? Конечно, если кто-то может порекомендовать другую реализацию в Java, я был бы благодарен.

1 ответ

Посмотрите на пример здесь: ССЫЛКА

или просто добавьте этот метод в класс "Keccak":

/**
 * @param string original string to get kekkan hash from it
 * @return hash or null
 */
public static String generateHash(String string) {
    Keccak keccak = new Keccak();
    String hex;
    try {
        hex = keccak.getHexStringByByteArray(string.getBytes("UTF-8"));
    } catch (UnsupportedEncodingException e) {
        return null;
    }
    // 576,64 is values for sha-512
    return keccak.getHash(hex, 576, 64);
}
Другие вопросы по тегам