我想用一个字符串初始化一个 PublicKey,例如23441AB…2583DA==
PublicKey publicKey=null;
Cipher publicKeyCipher = Cipher.getInstance("RSA/ECB/PKCS1PADDING");
publicKeyCipher.init(Cipher.ENCRYPT_MODE, publicKey);
当我传递一个空键时,我得到以下异常:
java.security.InvalidKeyException:传递给 RSA 的未知密钥类型
即使我传递了一个 Key publicKey,表示密钥类型是未知的。
我已经看到初始化 PublicKey 的正确方法是:
kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(1024);
kp = kpg.genKeyPair();
publicKey = kp.getPublic();
但我不想要随机密钥,我想要来自特定字符串的密钥。
编辑:我找到了将字节数组转换为 PublicKey 的方法,但我仍然遇到异常。
我想用一个存储其编码格式的 publicKey 字符串初始化一个 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 截断