出现乱码的原因可能是解密后的结果没有正确转换为字符串形式。下面是一个基于Java的示例代码,用于AES + Base64解密文件并正确处理解密结果。
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class AESDecryptor {
public static void main(String[] args) {
String encryptedFilePath = "encrypted_file.txt";
String decryptedFilePath = "decrypted_file.txt";
String secretKey = "your_secret_key";
try {
// 读取加密文件内容
byte[] encryptedData = readBytesFromFile(encryptedFilePath);
// 解密
byte[] decryptedData = decrypt(encryptedData, secretKey);
// 将解密结果转换为字符串形式
String decryptedString = new String(decryptedData, StandardCharsets.UTF_8);
// 写入解密后的文件
writeStringToFile(decryptedString, decryptedFilePath);
System.out.println("文件解密成功!");
} catch (Exception e) {
e.printStackTrace();
}
}
public static byte[] decrypt(byte[] encryptedData, String secretKey) throws Exception {
// Base64解码
byte[] decodedData = Base64.getDecoder().decode(encryptedData);
// 创建AES加密算法对象
Cipher cipher = Cipher.getInstance("AES");
SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(), "AES");
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
// 解密
return cipher.doFinal(decodedData);
}
public static byte[] readBytesFromFile(String filePath) throws IOException {
File file = new File(filePath);
byte[] data = new byte[(int) file.length()];
FileInputStream fis = new FileInputStream(file);
fis.read(data);
fis.close();
return data;
}
public static void writeStringToFile(String content, String filePath) throws IOException {
FileWriter writer = new FileWriter(filePath);
writer.write(content);
writer.close();
}
}
请将上述代码中的encrypted_file.txt
替换为你的加密文件路径,decrypted_file.txt
替换为你想要保存解密结果的文件路径,your_secret_key
替换为你的AES密钥。
上述代码使用Java标准库中的Base64
类进行Base64解码,再使用Cipher
类进行AES解密。最后,将解密后的字节数组转换为字符串形式,并保存到文件中。
如果上述代码仍然出现乱码,可能是加密或解密时使用的字符编码不正确。请根据实际情况修改代码中的字符编码。
上一篇:ae如何开启cuda加速
下一篇:AES - 解密