我必须编写代码来生成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)公钥和私钥所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)