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