我是 Android 和安全方面的新手。
我的应用程序使用由私钥加密的加密数据库。我想找到一种方法将这个私钥存储在一个 protected 地方,而不添加任何额外的密码/pin 码。
根据我的阅读,Android 的 keystore 是执行此操作的地方,但根据我的理解,如果我要使用它,它要求我为设备设置一个 pin 码(我没有想做!)。
关于在哪里存储这个 key 以及如何存储有什么建议吗? (只要我不需要设置密码,任何与 keystore 相关的解决方案都是可以接受的)
我的方向是使用一些外部开源 keystore (有什么建议吗?),我会将其编译为我的应用程序的一部分(并且因为 android 不在应用程序之间共享信息,所以可以使用)。
我知道在使用 root 设备时我最后的假设是不正确的,但就我而言,我只使用非 root 设备。
我搜索了很多(这里和其他地方)但找不到我要找的东西...
非常感谢任何帮助!! 10倍
最佳答案
您需要记住的一件事是,KeyChain
在 API 14 之前不可用。如果您打算针对较早的 API 版本,则需要另一个选项。你可以使用 SpongyCastle创建您自己的 keystore 。
如果您不打算要求用户输入密码,您至少应该隐藏密码。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
KeyStore ks = null;
try {
ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(null,null);
// Add certs or keys
ks.store(new FileOutputStream(new File(getFilesDir(),"out.bks")),"password".toCharArray());
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
static {
Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1);
}
}
关于android - 如何在没有密码的情况下在android中存储私钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17424861/