如何在没有pin码的情况下在android中存储私钥

如何在没有pin码的情况下在android中存储私钥,android,security,keystore,private-key,pin-code,Android,Security,Keystore,Private Key,Pin Code,我不熟悉安卓和安全 我的应用程序使用一个加密的数据库,该数据库由私钥加密。我想找到一种方法将此私钥存储在受保护的位置,而不添加任何其他密码/pin码 据我所知,Android的密钥库是实现这一点的地方,但据我所知,如果我要使用它,它要求我为设备设置pin码(我不想这么做!) 关于在何处存储此密钥以及如何存储此密钥,有何建议?(只要我不必设置pin码,任何与密钥库相关的解决方案都是可以接受的) 我的方向是使用一些外部开源密钥库(有什么建议吗?),我会将其编译为我的应用程序的一部分(因为androi

我不熟悉安卓和安全

我的应用程序使用一个加密的数据库,该数据库由私钥加密。我想找到一种方法将此私钥存储在受保护的位置,而不添加任何其他密码/pin码

据我所知,Android的密钥库是实现这一点的地方,但据我所知,如果我要使用它,它要求我为设备设置pin码(我不想这么做!)

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

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

我知道,在使用根设备时,我的上一个假设是不正确的,但在我的情况下,我只使用非根设备

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

非常感谢您的帮助!!
10x

您需要记住的一件事是,
钥匙链在API 14之前不可用。如果您打算针对较早的API版本,则需要另一个选项。您可以使用创建自己的密钥库

如果你不打算向用户索要密码,你至少应该隐藏密码

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);
    }
}

好的,我的目标也是早期的API版本。。。我不想只保护私钥,而是真正地保护它。我知道这只能通过用户输入密码来完成。我没有问题,只要它不是每次都发生(比如pin码)。所以,我想我需要一个外部密钥库解决方案。。。谢谢你拿到钥匙后,你可以将钥匙或密码缓存在内存中。首先,非常感谢你的帮助,非常感谢!我不认为将其保存在内存中是一个好主意,因为当我的应用程序进入后台时,android可以将其杀死,下次我输入它时,在内存中没有这些数据的情况下还原它。。。最重要的事情是什么?我可以使用什么样的外部“密钥库”(或者在这个问题上是受保护的存储)?再次-非常感谢!如果希望在活动之间保留密钥,可以将其存储在应用程序上下文中。如果应用程序被杀死,用户只需租用密码即可。否则,您应该使用Android密钥库。