Store / retrieve cryptographic cryptographic cryptographic cryptographic key (ECC) and private key

I need to write code to generate an ECC key pair.

Then I use the public key to encrypt the string and use the private key to decrypt.

Now I store a key pair, writing it to a pem file and storing it in external memory.

It does not seem safe.

So how to store and retrieve these keys? Thanks in advance.

Here is my code for generating a key pair and writing to a pem file:

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();
            }
        }
    });
+4
source share
1 answer

I would not suggest a pem file . The best way to keep sensitive information in android would be as very secure. more about keystore here . keystore

, this, , .

, .

1) , ( )
2) ( , db ..)
3) .

UPDATE:

, , , 1) https://developer.android.com/training/articles/keystore.html 2) http://www.androidauthority.com/use-android-keystore-store-passwords-sensitive-information-623779/

+1

Source: https://habr.com/ru/post/1686351/


All Articles