3

我需要String使用 XTEA 算法加密一些,并找到了这段代码,但我不确定如何使用它,我得到了一个java.lang.ArrayIndexOutOfBoundsException.

这是我使用它的方式:

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)

有人可以帮忙吗?

回答

正如 John Skeet 所建议的,我必须填充字符串以达到 8 的倍数:

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

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

1 回答 1

1

查看XTEA上的代码和Wikipedia 条目,问题似乎在于它仅适用于 8 字节的块,而您提供的是 14 字节(不是 8 的倍数)。

您可能需要添加一些填充,或者只是从纯文本中删除尾随 0,或者如果您需要能够在实际文本中表示 U+0000,您可以添加一些数据来说明多少真实有数据。

于 2013-08-12T09:25:14.983 回答