需要在Java中使用XTEA实现的帮助吗

需要在Java中使用XTEA实现的帮助吗,java,xtea,Java,Xtea,我需要使用XTEA算法加密一些字符串,找到了,但我不确定如何使用它,我得到了一个java.lang.ArrayIndexOutOfBoundsException 以下是我如何使用它: XTEA mXTEA = new XTEA(); mXTEA.setKey(XTEA_KEY.getBytes()); byte[] b = someString.getBytes(); mXTEA.encrypt(b, 0, b.length); 更具体地说,我不确定encrypt的最后两个参数

我需要使用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";
}
int len=myString.length();
int newLen=len+(8-len%8);

而(myString.length()查看代码,问题似乎是它只在8字节的块上工作,而您提供的是14字节(不是8的倍数)


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

哪一行引发了异常?请显示完整的堆栈跟踪。(另外,我强烈建议您不要使用未指定编码的
String.getBytes
重载。)我添加了堆栈跟踪。您说得对,所以我用空字符填充了字符串。谢谢。