3

我正在使用 Android 4.1 钥匙串,以下代码在 4.0 下运行良好,但现在给了我一个 Nullpointer 异常(密码无法读取某些内部属性)

privateKey = KeyChain.getPrivateKey(context,mAlias);
byte[] data = // some biary data
Cipher rsasinger = javax.crypto.Cipher.getInstance("RSA/ECB/PKCS1PADDING");
rsasinger.init(Cipher.ENCRYPT_MODE, privkey);

byte[] signed_bytes = rsasinger.doFinal(data);

我将 KeyChain 中的私钥处理为不透明的,只需将其与 java 安全 Api 一起使用。我需要以不同的方式使用 KeyChain API 吗?

4

1 回答 1

3

经过进一步调试并与 Google 工程师联系(谢谢!)后发现,Android 注册了不同的 JAVA Crypto 提供程序,并且只有 OpenSSL 提供程序能够使用密钥库中的 PrivateKey。

但是通过一些技巧和使用/system/lib/ssl/engines/libkeystore.so它应该可以解决这个问题。

请参阅http://code.google.com/p/ics-openvpn/source/browse/jni/jbcrypto.cpp和http://code.google.com/p/ics-openvpn/source/browse/src中的 proccessSignJellyBean /de/blinkt/openvpn/OpenVpnManagementThread.java#446我的解决方案。

于 2012-07-08T22:49:01.620 回答