我使用的是Android 4.1 Keychain,下面的代码在4.0下运行得很好,但现在给我一个空指针异常(Cipher不能读取一些内部属性)
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吗?
发布于 2012-07-09 06:49:02
经过进一步的调试和Google引擎的联系(谢谢!)事实证明,安卓注册了不同的JAVA Crypto提供程序,并且只有OpenSSL提供程序能够使用密钥库中的PrivateKeys。
但是通过一些黑客攻击和使用/system/lib/ssl/engines/libkeystore.so,应该可以解决这个问题。
有关我的解决方案,请参阅http://code.google.com/p/ics-openvpn/source/browse/src/de/blinkt/openvpn/OpenVpnManagementThread.java#446中的http://code.google.com/p/ics-openvpn/source/browse/jni/jbcrypto.cpp和proccessSignJellyBean。
https://stackoverflow.com/questions/11261774
复制相似问题