1

次のような文字列で PublicKey を初期化したい23441AB…2583DA==

PublicKey publicKey=null;
Cipher publicKeyCipher = Cipher.getInstance("RSA/ECB/PKCS1PADDING");
publicKeyCipher.init(Cipher.ENCRYPT_MODE, publicKey);

空のキーを渡すと、次の例外が発生します。

java.security.InvalidKeyException: 不明なキー タイプが RSA に渡されました

キー publicKey を渡しても、キーの種類が不明であると表示されます。

PublicKey を初期化する適切な方法は次のとおりです。

kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(1024);
kp = kpg.genKeyPair();
publicKey = kp.getPublic();

しかし、ランダムなキーは必要ありません。特定の文字列からのキーが必要です。

編集: バイト配列を PublicKey に変換する方法を見つけましたが、まだ例外が発生しています。

エンコードされた形式を格納する publicKey String で PublicKey を初期化したい: [B@41588dd0. Base64 から既にデコードされています。PublicKey は RSA で作成され、128 ビットで初期化されています。

byte [] pkArray=publicKey.getBytes();
X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(pkArray);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey pKey =keyFactory.generatePublic(pubKeySpec); //get the exception here
Cipher publicKeyCipher = Cipher.getInstance("RSA/ECB/PKCS1PADDING");
publicKeyCipher.init(Cipher.ENCRYPT_MODE, publicKey);

EncodedKeySpec を渡すと、次の例外が発生します。

java.security.InvalidKeySpecException: java.io.EOFException: DEF の長さ 66 オブジェクトが 57 で切り捨てられました

4

0 に答える 0