Как исправить javax.crypto.BadPaddingException: ошибка расшифровки в Java - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь создать программу Server / Client Echo с шифрованием.

Посмотрев немного, я нашел этот пост , в котором был дан ответ с простым пошаговым руководством о том, что необходимо сделать для шифрования связи между сервером и клиентом. Сейчас я на последнем шаге расшифровки ключа. Моя проблема в том, что когда сервер пытается расшифровать ключ, он не работает и выдает эту ошибку:

Exception in thread "main" javax.crypto.BadPaddingException: Decryption error
        at java.base/sun.security.rsa.RSAPadding.unpadOAEP(RSAPadding.java:497)
        at java.base/sun.security.rsa.RSAPadding.unpad(RSAPadding.java:292)
        at java.base/com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:366)
        at java.base/com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:392)
        at java.base/javax.crypto.Cipher.doFinal(Cipher.java:2202)
        at EnServer.main(EnServer.java:58)

Я пытался несколько раз изменить заполнение, но, если честно, я не знаю, что еще делать,

Это то, что клиент делает при шифровании ключа:

Cipher c = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
c.init(Cipher.ENCRYPT_MODE, publicKey);

byte[] encodedKey = key.getEncoded();
String b64Key = Base64.getEncoder().encodeToString(ek);
String eek = c.doFinal(b64Key.getBytes()).toString();
out.println(encryptedEncodedKey);

Это то, что сервер делает при попытке расшифровать ключ:

String encryptedEncodedKey = in.readLine();
Cipher c = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
c.init(Cipher.DECRYPT_MODE, kp.getPrivate());
//below is the line of code that the error points to
byte[] encodedKey = c.doFinal(encryptedEncodedKey.getBytes());
Key key = new SecretKeySpec(encodedKey, 0, encodedKey.length, "DES");
System.out.println(key);

В любом случае,заранее спасибо.

...