Я пишу код для приложения чата в Java, и я должен реализовать алгоритмы криптографии. Я использую RSA, у каждого пользователя свои ключи. Когда один пользователь отправляет сообщение другому пользователю, приложение шифрует сообщение и записывает шифр в файл .txt. Затем приложение прочитает этот .txt файл, расшифрует файл и покажет расшифрованный шифр ... но у меня ошибка
> javax.crypto.BadPaddingException: Decryption error
at sun.security.rsa.RSAPadding.unpadV15(RSAPadding.java:383)
at sun.security.rsa.RSAPadding.unpad(RSAPadding.java:294)
at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:363)
at com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:389)
at javax.crypto.Cipher.doFinal(Cipher.java:2164)
at org.fastchat.User.readMessage(User.java:139)
at org.fastchat.ChatWith.<init>(ChatWith.java:80)
at org.fastchat.WatchInbox.startWatch(WatchInbox.java:75)
at org.fastchat.WatchInbox.run(WatchInbox.java:41)
Я проверил ключи и сообщение, не могли бы вы рассказать мне больше об этой проблеме? Функция для шифрования и записи сообщения в папку «Входящие»
public void sendMessage(User receiver, String message) throws Exception {
//Encrypter message, sent to receiver inbox
// Getting the public key from the key pair
PublicKey publicKey = receiver.getPub();
// Creating a Cipher object
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
// Initializing a Cipher object
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
// Add data to the cipher
byte[] input = message.getBytes();
cipher.update(input);
// encrypting the data
byte[] cipherText = cipher.doFinal();
// System.out.println(new String(cipherText, "UTF8"));
BufferedWriter recFile=new BufferedWriter(new FileWriter(receiver.getInbox()+"/"+getUsername()+".txt"));
recFile.write(new String(cipherText,"UTF8"));
//DONT DELETE
//Make check file in receiver check folder, inbox check
BufferedWriter check=new BufferedWriter(new FileWriter(receiver.getCheck()+"/"+getUsername()+".txt"));
Random random=new Random();
Integer num=random.nextInt(20);
check.write(num.toString());
check.close();
recFile.close();
}
Это функция для дешифрования и чтения сообщения
public String readMessage(String msg) throws Exception{
// Creating a Cipher object
System.out.println("\n\n"+msg+"\n"); //!!!!!
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
// Initializing the same cipher for decryption
cipher.init(Cipher.DECRYPT_MODE, getPriv());
// Decrypting the text
byte[] decipheredText = cipher.doFinal(msg.getBytes());
return new String(decipheredText,"UTF8");
}
Могу ли я шифровать / дешифровать с помощью алгоритма RSA только с использованием файла .txt или I должны использовать какие-то дополнительные методы?