這可能與this answered question重複,但我似乎無法得到相同的結果。希望在這裏得到一些指導。使用JSEncrypt進行RSA加密並使用BouncyCastle(Java)進行解密
JSEncrypt(客戶端)
let encrypt = new Encrypt.JSEncrypt();
encrypt.setPublicKey(this.publicKey); // retrieved from server
encrypt.encrypt(password);
BouncyCastle的(服務器) - RSA密鑰生成
KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
generator.initialize(1024);
KeyPair pair = generator.generateKeyPair();
PublicKey pubKey = pair.getPublic();
PrivateKey privKey = pair.getPrivate();
// returned to client
String publicKeyStr = new String(Base64.encodeBase64(pubKey.getEncoded()));
String privateKeyStr = new String(Base64.encodeBase64(privKey.getEncoded()));
BouncyCastle的(服務器) - 解密
Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
// org.apache.commons.codec.binary.Hex
byte[] cipherText = cipher.doFinal(Hex.decodeHex(encrypted.toCharArray()));
decrypted = new String(cipherText, BaseConstant.ENC_UTF8);
錯誤
org.apache.commons.codec.DecoderException:位於索引0的非法十六進制字符I at org.apache.commons.codec.binary.Hex.toDigit(Hex.java:178) at org.apache.commons.codec .binary.Hex.decodeHex(Hex.java:89)
一兩件事我注意到是通過JSEncrypt,這是172加密文本的長度,而在服務器側加密產生256
的回答提到的問題是使用我已經設置的RSA/None/PKCS1Padding。還有什麼我可以錯過?
唯一的例外是不相關的解密。 Hex.decodeHex()拋出異常 – Egl
謝謝,但由@Hugo提供的解決方案是 – acys