使用Cipher加密数据时出错

时间:2015-10-28 08:52:00

标签: java encryption keystore

我有一个问题,我希望有人可以帮助我。

我想将公钥(.cer文件)加载到密钥库中,然后使用此密钥加密某些数据。

密钥似乎正确加载到密钥库中,因为我可以使用keystore.getCertificate(alias)方法查看其内容。

但是,当我尝试使用此密钥加密一段数据时,显示以下错误:

线程“main”中的异常java.security.InvalidKeyException:不支持的键类型:null 在sun.security.mscapi.RSACipher.engineGetKeySize(RSACipher.java:404)

这是我的代码:

String alias = "alias";

//Create keystore
KeyStore ksName  = KeyStore.getInstance(KeyStore.getDefaultType());

//Make an empty store
ksName.load(null);

// insert .cer file path here
FileInputStream fis = new FileInputStream("C:\\cert\\certificate.cer");
BufferedInputStream bis = new BufferedInputStream(fis);

CertificateFactory cf = CertificateFactory.getInstance("X.509");

while (bis.available() > 0) 
{
    java.security.cert.Certificate cert = cf.generateCertificate(bis);
    ksName.setCertificateEntry(alias, cert);
}          

// retrieve public key from keystore
PublicKey pubKey = (PublicKey) ksName.getKey(alias, null);

String data = "... data to be encrypted ....";
String alg = "RSA/ECB/PKCS1Padding";
Cipher cipher = Cipher.getInstance(alg);
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
byte encryptedBytes[] = cipher.doFinal(data.getBytes());

我不知道为什么会收到此错误。

1 个答案:

答案 0 :(得分:0)

我已经设法找出问题所在。基本上,我正在从密钥库中错误地检索证书。代码应该是:

count

而不是:

 java.security.cert.Certificate pubCert = ksName.getCertificate(alias);