我有一些加密的帐户信息并写入这样的文件:
String key = "Bar12345Bar12345";
Key aesKey = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");
byte[] encrypted = text.getBytes();
cipher.init(Cipher.DECRYPT_MODE, aesKey);
String decrypted = new String(cipher.doFinal(encrypted));
System.err.println(decrypted);
因此文件的内容是一个字符串,中间没有任何中断。如果我想解密字符串,我会这样做:
byte[] encrypted
只要lines.getByte()
与加密过程中使用的相同,就可以正常工作,但是当我尝试使用FileReader和BufferedReader从文件中读取加密文本并使用它将其更改为一个字节时javax.crypto.IllegalBlockSizeException: Input length must be multiple of 16 when decrypting with padded cipher
它会抛出异常
{{1}}
答案 0 :(得分:1)
在尝试进行任何解密之前,将加密过程中的密文与lines.getByte()中的密文进行比较。他们很可能是不同的。在解密之前,首先尝试将整个文件读入byte []。对称密码需要在相同大小的块上进行工作,在这种情况下为16个字节。
如果我没有评论一些糟糕的协议选择,我也会失职。
加密很难自行解决。考虑以不同的方式解决您的问题。