我正在尝试使用加密制作服务器/客户端 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);
无论如何,提前谢谢。