**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
11天前关门了。
改进这个问题
在我掌握java的过程中,我开始做一些aes加密和解密,但遇到了一些问题。我可以加密和解密只是罚款使用我下面的2个方法。
public static byte[] encryptString(String datatoEncrypt, String myKey, Cipher cipher)
{
try
{
byte[] text = datatoEncrypt.getBytes(UNICODE_FORMAT);
byte[] decodedKey = Base64.getDecoder().decode(myKey);
SecretKey originalKey = new SecretKeySpec(decodedKey, 0, decodedKey.length, "AES");
cipher.init(Cipher.ENCRYPT_MODE, originalKey);
byte[] textEncrpted = cipher.doFinal(text);
return textEncrpted;
}
catch(Exception e)
{
return null;
}
}
以及解密方法
public static String decryptString(byte[] datatoDecrypt, String myKey, Cipher cipher)
{
try
{
System.out.println("Key " + myKey);
byte[] decodedKey = Base64.getDecoder().decode(myKey);
SecretKey originalKey = new SecretKeySpec(decodedKey, 0, decodedKey.length, "AES");
cipher.init(Cipher.DECRYPT_MODE, originalKey);
byte[] textDecrpted = cipher.doFinal(datatoDecrypt);
String result = new String(textDecrpted, StandardCharsets.UTF_8);
return result;
}
catch(Exception e)
{
return null;
}
}
我的问题是当我加密时,我把加密的文件保存到一个文本文件中,现在我试图解密这个文本文件,但它不会解密。
public static void task1()
{
System.out.println("Key in file path name: ");
String filename = keyboard.nextLine();
try
{
Scanner inputFile = new Scanner(new File(filename));
String message = readFile(filename);
String key = generateKey();
Cipher chipher;
chipher = Cipher.getInstance("AES");
System.out.println("Key is " +key);
byte[] encryptedData = encryptString(message, key, chipher);
String encryptedString = new String(encryptedData);
System.out.println("Encrypted data is: " + encryptedString);
PrintWriter writer = new PrintWriter("ciphertext.txt");
writer.println(encryptedString);
writer.close();
byte[] tryagain;
System.out.println("enter File name");
String filename1 = keyboard.nextLine();
tryagain = Files.readAllBytes(Paths.get(filename1));
System.out.println("Enter Key");
String keyString = keyboard.nextLine();
String decrypted = decryptString(tryagain,keyString,chipher);
System.out.println("Decrypted data: " + decrypted);
}
catch(Exception e)
{
System.out.println("Error " );
}
}
它一直给我回空,我相信问题是文本文件,因为当不使用文本文件它运行得很好。下面是一些代码正常操作时,不使用文本文件。
String text = "Santosisverycool";
String key = generateKey();
Cipher chipher;
chipher = Cipher.getInstance("AES");
System.out.println("Key is " +key);
byte[] encryptedData = encryptString(text, key, chipher);
String encryptedString = new String(encryptedData);
System.out.println("Encrypted data is: " + encryptedString);
String decrypted = decryptString(encryptedData,key,chipher);
System.out.println("decrypted: " +decrypted);
有人有什么解决办法吗?我在这个问题上已经坚持了至少一个星期,还没有进一步解决它。
1条答案
按热度按时间6ojccjat1#
writer.println(加密字符串);
println
打印字符串,并在字符串后加一个换行符。你不需要新行,只需要字符串。替换为:正如注解中指出的,字节数组很可能包含不可打印的字符,从而导致结果数据损坏。取而代之的是:
只需跳过字符串转换,将字节数组直接写入具有
FileOutputStream
: