最近在研究android的keystore安全存儲,網上就一篇關於這個的博客,但是有些地方沒講清楚,資料非常少。。。
我使用以下方式存儲了私鑰和證書:
mKeyStore = KeyStore.getInstance("AndroidKeyStore");//獲取密鑰庫
KeyStore.PrivateKeyEntry expected = new KeyStore.PrivateKeyEntry(priKey, expectedChain);
mKeyStore.setEntry("mytestRSAkey", expected, new KeyStoreParameter.Builder(this.getBaseContext()).setEncryptionRequired(true).build());//加密存儲
現在我要提取公鑰和私鑰:
actualEntry = mKeyStore.getEntry("mytestRSAkey",null);//獲取密鑰
KeyStore.PrivateKeyEntry actual = (KeyStore.PrivateKeyEntry) actualEntry;
pubKey=actual.getCertificate().getPublicKey();
priKey=actual.getPrivateKey();
可能是出於保護私鑰的目的,priKey.getEncoded()是獲取不到私鑰的,只有一個密鑰索引,導致我使用使用該私鑰解密時出錯
public static byte[] decrypt_RSA(byte[] encryptedData, PrivateKey privateKey)
{
try
{
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
return cipher.doFinal(encryptedData);
} catch (Exception e)
{
return null;
}
}
現在我該怎麼使用priKey來解密數據啊
問題解決,Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");就可以了