【问题标题】:Using Android 4.1 Keychain使用 Android 4.1 钥匙串
【发布时间】:2012-06-29 12:27:14
【问题描述】:

我使用的是 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 吗?

【问题讨论】:

  • NullpointerException 发生在哪里(源代码行)?顺便说一句:您为什么使用密码进行签名?在 RSA 中,如果您加密数据块的消息摘要,这是可能的,但我会使用签名来代替。

标签: android security android-4.2-jelly-bean


【解决方案1】:

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

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

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

【讨论】:

  • 这是一个已跟踪的问题,Google 是否计划修复它?
  • Jellybean 4.2 允许更多 Crypto 算法与 OpenSSL Provider 一起使用。
猜你喜欢
  • 1970-01-01
  • 2013-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-30
  • 1970-01-01
相关资源
最近更新 更多