2013-08-12 49 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