2013-03-07 98 views
0

我正在試驗各種各樣的Keccak實現爲java。到目前爲止,This implementation是最有希望的,但是我得到了奇怪的結果。測試用例定義爲here(儘管我按照測試向量直接使用了十六進制字符串)。當前(和正確的)測試向量以綠色定義爲here(爲了方便起見,我提供了鏈接,以免任何人不必從網站下載官方測試向量zip文件)。意外keccak輸出

對於初學者,我不明白測試向量中'len'和'msg'字段之間的相關性。 'Len'應該是'msg'的長度,以位爲單位。例如,'len'= 5,'msg'=「48」(一個十六進制字符串),我認爲2個十六進制數字= 1個字節,即= 8位。我錯過了什麼?

我只對以下長度的輸入獲得正確的摘要(按照測試向量):16,24,40,56,64,72,112和128(其中長度對應於'len '測試向量中的字段,輸入是'味精')。然而,我得到的長度值:32,48,80,88,96,104與測試向量不匹配。任何人都可以做出一個有教育的猜測,爲什麼會發生這種情況?當然,如果任何人都可以在Java中推薦不同的實現,我會很感激。

+0

我只是把我的新[Keccak和SHA-3的Java實現的GitHub] (https://github.com/Bobulous/Cryptography),所以你可以給它一個旋轉。我一直在開發和測試(並重寫)它六週,它通過了53,000個單元測試(主要基於由Keccak團隊生成的KAT),所以它應該相當合理。 – Bobulous 2017-05-26 00:26:40

回答

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); 
}