1

我想用一个字符串初始化一个 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 截断

4

0 回答 0