2013-03-07 6 views
0

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

Для начала я не понимаю корреляцию между полями «len» и «msg» в тестовых векторах. «Лен» должен быть длиной «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, я был бы благодарен.

+0

Я просто толкнул мою новую [реализацию Java из Keccak и SHA-3 в GitHub] (https://github.com/Bobulous/Cryptography), чтобы вы могли дать этому вращение. Я занимаюсь разработкой и тестированием (и переписыванием) его в течение шести недель, и он пропускает 53 000 единичных тестов (основанных главным образом на KAT, созданных командой Keccak), поэтому он должен быть достаточно прочным. – Bobulous

ответ

1

взгляд на примере здесь: LINK

или просто добавить этот метод в классе "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); 
} 
Смежные вопросы