我需要使用XTEA算法加密一些String
,找到了这个代码,但我不知道如何使用它,我得到了一个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)
有人能帮忙吗?
答案
正如约翰·斯基特所建议的那样,我必须填充字符串才能达到8:的倍数
int len = myString.length();
int newLen = len + (8- len % 8);
while(myString.length()<newSize){
myString += " ";
}
看看XTEA上的代码和维基百科条目,问题似乎是它只适用于8字节的块,而你提供的是14字节(不是8的倍数)。
你可能需要添加一些填充,或者从明文中去掉尾随的0,或者如果你需要能够在实际文本中表示U+0000,你可以添加一点数据来说明有多少真实数据。