ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 存储/检索椭圆曲线加密(ECC)公钥和私钥

2019-07-05 20:01:22  阅读:381  来源: 互联网

标签:java android


我必须编写代码来生成ECC密钥对.

然后我使用公钥加密字符串并使用私钥进行解密.

现在我通过将密钥对写入pem文件并存储在外部存储器中来存储密钥对.

这似乎不安全.

那么如何存储和检索这些密钥呢?
预先感谢.

这是我生成密钥对并写入pem文件的代码:

btnGenKey.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ECNamedCurveParameterSpec spec = ECNamedCurveTable.getParameterSpec("prime256v1");
            try {
                KeyPairGenerator g = KeyPairGenerator.getInstance("ECDSA","SC");
                g.initialize(spec, new SecureRandom());
                KeyPair keyPair = g.generateKeyPair();
                privateKey = keyPair.getPrivate();
                publicKey = keyPair.getPublic();
                Toast.makeText(MainActivity.this, "GEN KEY SUCCESS!!", Toast.LENGTH_SHORT).show();
                String state;
                state = Environment.getExternalStorageState();
                if(Environment.MEDIA_MOUNTED.equals(state))
                {
                    File root = Environment.getExternalStorageDirectory();
                    File dir = new File(root.getAbsolutePath()+"/EDCSA1");
                    if(!dir.exists())
                    {
                        dir.mkdir();
                    }
                    File pub = new File(dir,"pub.pem");
                    File prv = new File(dir,"pri.pem");
                    try
                    {
                        FileOutputStream fileOutputStream = new FileOutputStream(pub);
                        StringWriter writer = new StringWriter();
                        PemWriter pemWriter = new PemWriter(writer);
                        pemWriter.writeObject(new PemObject("PUBLIC KEY",publicKey.getEncoded()));
                        pemWriter.flush();
                        pemWriter.close();
                        String publickeyPem = writer.toString();
                        fileOutputStream.write(publickeyPem.getBytes());
                        fileOutputStream.close();
                        Toast.makeText(MainActivity.this, "SAVE PUBLICKEY", Toast.LENGTH_SHORT).show();
                        ///
                        FileOutputStream fileOutputStream2 = new FileOutputStream(prv);
                        StringWriter writer2 = new StringWriter();
                        PemWriter pemWriter2 = new PemWriter(writer2);
                        pemWriter2.writeObject(new PemObject("PRIVATE KEY",privateKey.getEncoded()));
                        pemWriter2.flush();
                        pemWriter2.close();
                        String privatekeyPem = writer2.toString();
                        fileOutputStream2.write(privatekeyPem.getBytes());
                        fileOutputStream2.close();
                        Toast.makeText(MainActivity.this, "SAVE PRIVATE", Toast.LENGTH_SHORT).show();
                    }
                    catch (Exception ex)
                    {
                        ex.printStackTrace();
                    }
                }

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });

解决方法:

我不建议使用pem文件.在android中存储您的秘密信息的最佳方式是在密钥库中,因为它非常安全.阅读更多关于keystore here的信息.

如果您正在寻找要应用的密码转换,请参阅this,因为它包含您可以使用的算法和密码转换列表.

以下是关于如何使用所有这些的一般概念.

1)初始化密钥库,生成密钥对(公钥和私钥)
2)加密你的字符串并将其存储在存储中(共享首选项,数据库等)
3)从存储中获取加密字符串并解密以供您使用.

UPDATE :Examples

如果您想要完整的工作,请参考这些示例
1)https://developer.android.com/training/articles/keystore.html
2)http://www.androidauthority.com/use-android-keystore-store-passwords-sensitive-information-623779/

标签:java,android
来源: https://codeday.me/bug/20190705/1390303.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有