![](/img/trans.png)
[英]Elliptic Curve Cryptography (ECDSA) Private Key Matches Public Key (Java - Bouncy Castle)
[英]Store/Retrieve Elliptic Curve Cryptography (ECC) public key and private key
我必须编写代码来生成 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
因为它非常安全。 在此处阅读有关密钥库的更多信息。
如果您正在寻找要应用的密码转换,请参考这里,因为它有一个您可以使用的算法和密码转换列表。
这是有关如何使用所有这些的一般想法。
1)初始化密钥库,生成密钥对(公钥和私钥)
2)加密您的字符串并将其存储在存储中(共享首选项,db等)
3)从存储中获取加密的字符串并解密以供您使用。
更新:示例
如果您想要完整的工作,请参考这些示例 1) https://developer.android.com/training/articles/keystore.html 2) http://www.androidauthority.com/use-android-keystore-store-passwords -敏感信息-623779/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.