我必須編寫代碼來生成ECC密鑰對。存儲/檢索橢圓曲線加密(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文件是安全性好。我必須從鏈接中讀取密鑰庫,但是不能給我例子中的示例代碼。 – nistelrooy41001662
i can,@ nistelrooy41001662查看我的更新回答 –
謝謝@ nistelrooy41001662很高興我能幫到你 –