2

古いバージョンでは機能しますが、Android 4.1 では KeyChain.getPrivateKey(Context,String) メソッドに問題があることを読みました。JellyBean で秘密鍵を取得する方法はありますか?

この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));
}

編集:追加時に証明書エイリアス(デフォルトのhex-hex-hex)を変更しないと、getPrivateKeyはnullを返しますが、エイリアスをたとえばに変更すると、aaaメソッドは何かを返しますが、まだ正しい秘密鍵ではありません. (たとえば、primeP =null primeQ =null で秘密鍵が返されます。Android 4.0.4 では、primeP と primeQ は null 値ではありません)

4

1 に答える 1

1

PrivateKeyaをエンコードできると仮定することはできません。aが をPrivateKey返す場合nullgetEncoded()、エンコーディングをサポートしていません。Key.getEncoded()のドキュメントを参照してください。

JellyBean では、 を介して返された秘密鍵KeyChainが処理されることはありません。それらに対して実行される操作は、実際には別のプロセスで実行されます。これは、実際のキー事項が何らかのハードウェア セキュリティ モジュールに格納されている可能性があるためです。java.security.Signatureこのキーで引き続き API を呼び出すことができます。

于 2012-09-21T23:28:19.350 に答える