Я пытаюсь использовать симметричный ключ, зашифрованный с помощью асимметричного шифрования, между двумя пользователями в веб-приложении весны. Но я получаю сообщение об ошибке javax.crypto.BadPaddingException.Ошибка обработки запроса; Вложенное исключение - javax.crypto.BadPaddingException: Ошибка дешифрования
Здесь подробно проблема. В одном методе контроллера я использую симметричный ключ AES для шифрования файлов, затем шифрую секретный ключ AES с открытым открытым ключом пользователя и сохраняя его в базе данных MySQL.
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128);
SecretKey secretKey = keyGen.generateKey();
Cipher AESCipher= Cipher.getInstance("AES");
AESCipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] cipherData = AESCipher.doFinal(file.getBytes());
//storing cipherData in database
Cipher RSACipher= Cipher.getInstance("RSA");
RSACipher.init(Cipher.ENCRYPT_MODE, testPubKey);
byte[] aesKeyEncryptedBytes = RSACipher.doFinal(secretKey.getEncoded());
//storing aesKeyEncryptedBytes in Database
В другом методе контроллера я получаю зашифрованный SecretKey из базы данных, дешифрование SecretKey с помощью закрытого ключа. Создание нового секретного ключа AES для дешифрования зашифрованного файла.
Cipher RSACipher= Cipher.getInstance("RSA");
RSACipher.init(Cipher.DECRYPT_MODE, testPvtKey);
//file.getSymmetricKey method give us the encrypted AES symmetric key from database
byte[] decsymetricKeyBytes=RSACipher.doFinal(file.getSymetricKey());
SecretKey symetricKey = new SecretKeySpec(decsymetricKeyBytes,
"AES");
Cipher AESCipher= Cipher.getInstance("AES");
AESCipher.init(Cipher.DECRYPT_MODE, symetricKey);
byte[] plainText = AESCipher.doFinal(file.getResourceFile());
Но он дает ошибку, когда я дешифрования зашифрованного симметричного ключа с помощью PrivateKey в этой строке кода.
byte[] decsymetricKeyBytes=RSACipher.doFinal(file.getSymetricKey());
Это дает эту ошибку
May 19, 2015 12:30:27 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [mvc-dispatcher] in context with path [/SP_SC_Hibernate] threw exception [Request processing failed; nested exception is javax.crypto.BadPaddingException: Decryption error] with root cause
javax.crypto.BadPaddingException: Decryption error
at sun.security.rsa.RSAPadding.unpadV15(Unknown Source)
at sun.security.rsa.RSAPadding.unpad(Unknown Source)
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:2121)
at com.dynamic.spring.ResourceController.downloadAsymmetricFile(ResourceController.java:396)
помочь мне в этом, пожалуйста. Я использовал один и тот же подход в простом java-приложении [одна основная функция], где он работает отлично. Я также сделал статические экземпляры Cipher в своем приложении, чтобы зашифровать и расшифровать, но это тоже не работает.
Еще одна вещь Когда я расшифровываю зашифрованный симметричный ключ в том же методе контроллера, шифрование и дешифрование i-e происходит одним способом, он отлично работает.
Я не знаю, где я ошибаюсь или чего не хватает. Помощь будет очень оценена. Благодарю.
Нет, это невозможно. Потому что я храню закрытый и открытый ключ от userid в базе данных. Таким образом, я проверяю, что используется тот же самый закрытый ключ. Я проверил ключи. Он работает нормально. –