4

我是安卓和安全的新手。

我的应用程序使用由私钥加密的加密数据库。我想找到一种方法将此私钥存储在受保护的地方,而无需添加任何额外的密码/密码。

根据我的阅读,Android 的密钥库是执行此操作的地方,但据我了解,如果我要使用它,它要求我为设备设置一个密码(我不想这样做!)。

关于在哪里存储此密钥以及如何存储的任何建议?(只要我不必设置密码,任何与密钥库相关的解决方案都是可以接受的)

我的方向是使用一些外部开源密钥库(有什么建议吗?),我将把它编译为我的应用程序的一部分(并且因为 android 不会在应用程序之间共享信息,所以可以使用)。

我知道我的最后一个假设在使用有根设备时是不正确的,但就我而言,我只使用非根设备。

我搜索了很多(这里和其他地方),但找不到我要找的东西......

任何帮助都非常感谢!10倍

4

1 回答 1

1

您需要记住的一件事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);
    }
}
于 2013-07-02T12:08:59.380 回答