【发布时间】:2016-10-27 01:38:23
【问题描述】:
所以我在使用 java AES 加密解密文件或字符串时遇到问题。所以我有一个包含二进制数的 text 变量。我创建了一个随机密钥。然后我加密文本并返回加密的 byte[] 并将其写入 .txt 文件。并且加密过程有效。
然后我从 exampleOrig.txt 中获取了所有字节并进行了解密过程,并在下面返回了一个错误。我不确定出了什么问题,做一些研究,它并没有真正帮助。任何帮助,将不胜感激。谢谢!
public static void main(String[] args) throws Exception {
// Generate AES Key
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
SecretKey myAesKey = keyGenerator.generateKey();
Cipher aesCipher = Cipher.getInstance("AES");
String text = "11111110001100110011011111111011011111111101000111000101111111111111111001011110110001011111110111111001110110011100110111011111101111100111101";
// ENCRYPT the text
aesCipher.init(Cipher.ENCRYPT_MODE, myAesKey);
byte[] textEncrypted = aesCipher.doFinal(text.getBytes());
// Output results
System.out.println("Text [Byte Format]: " + text);
System.out.println("Text : " + new String(text));
System.out.println("Text Encrypted: " + textEncrypted);
// Write the 'text' to a file
File encryptFileResult = new File("TestFiles/exampleOrig.txt");
if (!encryptFileResult.exists()) {
encryptFileResult.createNewFile();
} else {
encryptFileResult.delete();
encryptFileResult.createNewFile();
}
FileWriter encryptFileWriter = new FileWriter(encryptFileResult.getAbsoluteFile());
BufferedWriter bufferedWriter = new BufferedWriter(encryptFileWriter);
bufferedWriter.write(new String(textEncrypted));
bufferedWriter.close();
// Grab all bytes from the 'exampleOrig.txt' file
byte[] encryptedBytes = Files.readAllBytes(encryptFileResult.toPath());
// DECRYPT the text
aesCipher.init(Cipher.DECRYPT_MODE, myAesKey);
byte[] textDecrypted = aesCipher.doFinal(encryptedBytes);
System.out.println("Text Decrypted: " + new String(textDecrypted));
}
错误消息:
Exception in thread "main" javax.crypto.IllegalBlockSizeException: Input length must be multiple of 16 when decrypting with padded cipher
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:913)
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:824)
at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:436)
at javax.crypto.Cipher.doFinal(Cipher.java:2165)
at main.AESEncryption.main(AESEncryption.java:50)
【问题讨论】:
-
让我试试
-
不,没有用。我收到与上述相同的错误消息。
标签: java encryption cryptography