我正在尝试反序列化256字节的SecretKey,我已转换为一个大整数,然后序列化为一个txt文件,该文件看起来像“22969273808780529062174833620303058617357675423823001978700975369013049788648”,然后deser初始化密钥并将其转换回秘密密钥,但它给了我错误“最后一个单元没有足够的有效位”,我尝试将字符串转换为
byte[]
我正在使用 java 8 并使用
java.crpyto
导入来尝试执行此操作。
try {
BufferedReader reader = new BufferedReader(new FileReader(fileKey)); //läser nyckelfilen
secretKey = reader.readLine(); //Lägger datan in i strängen
reader.close();
}
catch (IOException e1) {
e1.printStackTrace();
}
byte[] KeyData = Base64.getDecoder().decode(secretKey); //gör om nyckeln till bytes
SecretKey KS = new SecretKeySpec(KeyData, 0, KeyData.length, "Blowfish"); // gör nyckeln till en secretkey
您的输入字符串不是有效的 Base64 编码字符串。
让我通过解码 base64 中的 'Hello' 字符串来演示问题的根源:
Base64:
'Hello'
| ASCII | Base64(A=0, Z=25, z=51, /=63)
'H' | 0100 1000 | 00 000111
'e' | 0110 0101 | 00 011110
'l' | 0110 1100 | 00 100101
'l' | 0110 1100 | 00 100101
'o' | 0110 1111 | 00 101000
解码:
[A-Za-z0-9+/]
字母'H' 00 0001 11
'e' 00 01 1110
'l' 00 1001 01
'l' 00 10 0101
'o' 00 1010 00
0001 1101 0x1D
1110 1001 0xE9
0110 0101 0x65
1010 00?? 0xA? <- Issue (Last unit does not have enough valid bits)