我是Android和安全新手。
我的应用使用加密的数据库,该数据库由私钥加密。我想找到一种方法将这个私钥存储在受保护的地方,而无需添加任何额外的密码/密码。
从我所读到的,Android的密钥库就是这样做的地方,但从我的理解,如果我将使用它,它要求我为设备设置一个密码(我不会想做!)。
有关存储此密钥的位置以及如何存储的任何建议? (任何与密钥库相关的解决方案都是可以接受的,只要我不必设置密码)
我的方向是使用一些外部开源密钥库(任何建议?),我将作为我的应用程序的一部分进行编译(并且因为android不会在应用程序之间共享信息,所以可以使用)。
我知道使用root设备时我的最后一个假设是不正确的,但对于我的情况,我只使用非root设备。
我搜索了很多(这里和其他地方)并找不到我想要的东西......
任何帮助都非常感谢!! 10X
答案 0 :(得分:1)
您需要记住的一件事是,在API 14之前KeyChain
不可用。如果您打算定位早期的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);
}
}