【发布时间】:2021-12-05 19:44:47
【问题描述】:
我正在尝试在给定的二进制文本中翻转一点并将我的二进制字符串更改为字节数组 我正在翻转的位索引是 0~63 之间的范围。我翻转 1~63 没有任何问题。但是,每当我翻转该位的第 0 个索引并更改为字节时,我如何获得 9 个块段。像这样:(BF代表翻转前,AF代表翻转后)
输入是BF的二进制字符串 输出为AF的二进制字符串
BF:0100011001100001011000110110010101100010011011110110111101101011 AF:1100011001100001011000110110010101100010011011110110111101101011 分段:0 -58 97 99 101 98 111 111 107
线程“main”javax.crypto.IllegalBlockSizeException 中的异常:输入长度不是 8 个字节的倍数
这是我的翻转位代码:
public static String flipBit(String s1, int num)
{
char[] arr = s1.toCharArray();
System.out.println(num);
System.out.print("BF:");
for(int i = 0; i<arr.length;i++)
{
System.out.print(arr[i]);
}
System.out.println();
if(arr[num] == '1')
{
// System.out.println("Hello");
arr[num] = '0';
}
else
if(arr[num] == '0')
{
// System.out.println("HI");
arr[num] = '1';
}
return String.copyValueOf(arr);
}
这是我将二进制字符串更改为字节的代码:
public static byte[] binaryToByte(String s1)
{
byte[] array = new BigInteger(s1,2).toByteArray();
return array;
}
这里是主要功能:
String flipedBit = flipBit(plaintextBinary,0);
System.out.println("AF:" + flipedBit);
byte[] fbp = binaryToByte(flipedBit);
for(int i = 0; i<fbp.length;i++)
{
System.out.print(fbp[i] + " ");
}
Cipher encrypt2 = Cipher.getInstance("DES/ECB/NoPadding");
Key ky2 = new SecretKeySpec(key,"DES");
encrypt2.init(Cipher.ENCRYPT_MODE,ky2);
byte[] cbp = encrypt.doFinal(fbp);
如果我翻转唯一的第 0 个索引,为什么会得到 9 个段?
【问题讨论】:
-
为什么不显示输入、预期输出和反转的位。
-
你在哪里打电话
javax.crypto? -
我和@WJS 在一起。显示函数的输入、预期输出和实际输出。