我正在尝试反序列化256个字节的SecretKey,我已将其转换成一个大整数,然后序列化为一个txt文件,该文件看起来像是“ 22969273808780529062174833620303058617357675423823001978700975369013013049648”,然后反序列化该密钥并将其转换回一个秘密密钥,但是给我一个错误“最后一个单元没有足够的有效位”,我尝试将字符串转换为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
答案 0 :(得分:0)
您输入的字符串不是有效的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+/]
字母将base64文本映射为字节'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)