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

java– 存储检索椭圆曲线加密(ECC)公钥和私钥,第1张

概述我必须编写代码来生成ECC密钥对.然后我使用公钥加密字符串并使用私钥进行解密.现在我通过将密钥对写入pem文件并存储在外部存储器中来存储密钥对.这似乎不安全.那么如何存储和检索这些密钥呢?预先感谢.这是我生成密钥对并写入pem文件的代码:btnGenKey.setOnClickListener(new

我必须编写代码来生成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 – 存储/检索椭圆曲线加密(ECC)公钥和私钥全部内容,希望文章能够帮你解决java – 存储/检索椭圆曲线加密(ECC)公钥和私钥所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1117412.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存