Android:公钥初始化

时间:2013-03-13 23:41:57

标签: android public-key-encryption x509 encryption

我想使用诸如23441AB…2583DA==

之类的字符串初始化PublicKey
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();

但我不想要一个随机密钥,我想要一个特定String的密钥。

编辑:我找到了将字节数组转换为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

0 个答案:

没有答案