我有以下循环(执行解密的程序的一部分):
for(int i=0; i < inputd.length; i++){
byte[] blockd = this.fromHex(inputd[i]);
byte[] pt = cipher.doFinal(blockd); // Problem?
if(plainText == null)
plainText = new String(pt);
else
plainText+=new String(pt);
}
在标记的语句中,cipher.doFinal(blockd)
返回不同大小的数组。问题是如果在一个大小的迭代数组中返回30并且在下一次迭代中说它的25(更小)然后赋值替换前25个字符,前一次迭代的最后5个字符仍在数组中。
这是fromHex()
函数:
private byte[] fromHex(String b){
byte[] bt = (new BigInteger(b, 16)).toByteArray();
if(bt.length > 64){
bt = Arrays.copyOfRange(bt, 1, 65);
}
return bt;
}
我该如何解决这个问题?在循环结束之前为两者分配null都没有帮助。
答案 0 :(得分:1)
因为每次在每次迭代中创建byte [] pt的新实例时,所以不必担心此数组的先前大小。
尝试使用此方法转换十六进制。字符串到字节数组
private byte[] toBytes(String s)
{
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2)
{
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)+ Character.digit(s.charAt(i+1), 16));
}
return data;
}