2

我讀到雖然在舊版本上它有效,但Android 4.1上的方法KeyChain.getPrivateKey(Context,String)存在問題。有人有解決方法如何獲得JellyBean上的私人密鑰?Android 4.1上的KeyChain.getPrivateKey(Context,String)?

看到這個Using Android 4.1 Keychain,但不知何故無法與我的情況一起工作。

不適用於4.1的代碼,但在老版本上效果很好。

PrivateKey pk; 
try { 
    pk = KeyChain.getPrivateKey(context,string); 
    byte[] pkByte = pk.getEncoded(); 
    pkBase64 = new String(Base64.encode(pkByte, Base64.NO_WRAP)); 
} 

編輯:發現,如果添加時,我不會改變證書別名(默認十六進制十六進制十六進制),然後getPrivateKey返回null,但是當我改變別名,例如,AAA方法返回的東西,但仍然不是正確的私鑰。 (例如,primeP = null primeQ = null返回的私鑰。在Android 4.0.4上,primeP和primeQ不是空值)

回答

1

您不能假設PrivateKey可以進行編碼。如果PrivateKeygetEncoded()返回null,那麼它只是不支持編碼。請參閱documentation for Key.getEncoded()

在果凍豆中,通過KeyChain返回的私鑰永遠不會在過程中。對其執行的任何操作實際上都是在另一個進程中完成的,因爲實際的關鍵問題可能存儲在某種硬件安全模塊中。您可能仍然使用此密鑰調用java.security.Signature API。

+0

getPrivateKey在JB上比在不同的版本上返回不同的值。我需要的主要事情是獲得私鑰作爲字符串值。 JB可以嗎? – TomM

+0

不可以,因爲我的答案中列出的原因無法完成。 – kroot

相關問題