2013-08-12 51 views
3

我需要使用XTEA算法加密一些String,並找到this code,但我不確定如何使用它並獲得java.lang.ArrayIndexOutOfBoundsException在Java中需要使用XTEA的實現方面的幫助

這裏是我如何使用它:

XTEA mXTEA = new XTEA();   
mXTEA.setKey(XTEA_KEY.getBytes()); 
byte[] b = someString.getBytes(); 
mXTEA.encrypt(b, 0, b.length); 

更具體地說,我不知道什麼是encrypt最後的兩個參數。我認爲off是一些偏移量,len是輸入流的長度。

編輯

她是完整的堆棧跟蹤:

08-12 16:42:03.475: E/AndroidRuntime(23894): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=14; index=14 
08-12 16:42:03.475: E/AndroidRuntime(23894): at xxx.XTEA.encryptBlock(XTEA.java:56) 
08-12 16:42:03.475: E/AndroidRuntime(23894): at xxx.XTEA.encrypt(XTEA.java:43) 

任何人都可以幫忙嗎?

回答

至於建議由約翰飛碟雙向,我必須將字符串填充,以得到8的倍數:

int len = myString.length(); 
int newLen = len + (8- len % 8); 

while(myString.length()<newSize){ 
    myString += "\0"; 
} 
+0

哪一行引發異常?請顯示完整的堆棧跟蹤。 (另外,我強烈建議你不要使用'String.getBytes'的重載,它不指定編碼。) –

+0

我添加了堆棧跟蹤。 – jul

回答

1

看代碼,它看起來像的問題Wikipedia entry on XTEA它僅適用於8字節的塊,並且您提供了14個字節(不是8的倍數)。

您可能需要添加一些填充,或者從明文刪除尾隨的0,或者如果您需要能夠在實際文本中表示U + 0000,則可以將一些數據添加到說有多少真實有數據。

+0

你是對的,所以我用空字符填充了我的字符串。謝謝。 – jul