次のような文字列で 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 で切り捨てられました