これはthis answered questionの重複かもしれませんが、私は同じ結果を得ることはできません。ここでいくつかの指導を願っています。RSAはJSEncryptを使用して暗号化し、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の不正な16進文字I at org.apache.commons.codec.binary.Hex.toDigit(Hex.java:178) at org.apache.commons.codec .binary.Hex.decodeHex(Hex.java:89)
サーバ側での暗号化は256
答えを生成しながら、私が気づいたことの一つは、172あるJSEncrypt、によって暗号化されたテキストの長さであります既に設定していたRSA/None/PKCS1Paddingを使うように質問されました。他に何が欠けていますか?
例外は復号化とは関係ありません。例外はHex.decodeHex()によってスローされました – Egl
ありがとう、しかし@Hugoによって提供された解決策は – acys