1

in Android i use below code to convert String to RSA private key. this code work when i use this site for String private key

https://www.devglan.com/online-tools/rsa-encryption-decryption

but when i use this site , my code dose not work.

https://8gwifi.org/RSAFunctionality?keysize=1024

my code in Android studio is :

public static PrivateKey stringToPrivateKey(String privateKeyString)
    {
        try {
            if (privateKeyString.contains("-----BEGIN PRIVATE KEY-----") || privateKeyString.contains("-----END PRIVATE KEY-----"))
                privateKeyString = privateKeyString.replace("-----BEGIN PRIVATE KEY-----", "").replace("-----END PRIVATE KEY-----", "");


            if (privateKeyString.contains("-----BEGIN RSA PRIVATE KEY-----") || privateKeyString.contains("-----END RSA PRIVATE KEY-----"))
                privateKeyString = privateKeyString.replace("-----BEGIN RSA PRIVATE KEY-----", "").replace("-----END RSA PRIVATE KEY-----", "");

            privateKeyString.trim();
            privateKeyString = privateKeyString.replaceAll("\\s+","");
            privateKeyString = privateKeyString.replaceAll("\\r+","");
            privateKeyString = privateKeyString.replaceAll("^ | $|\\n ", "");


            byte[] keyBytes = Base64.decode(privateKeyString, Base64.DEFAULT);
            PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
            KeyFactory keyFactory = KeyFactory.getInstance(RSA);
            return keyFactory.generatePrivate( spec);

        } catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
            e.printStackTrace();
        }
    }

with second link Error is in this line

keyFactory.generatePrivate( spec);

m-tech
  • 338
  • 2
  • 14

1 Answers1

0

This code solve my problem:

void dear(String publicKeyB64)  throws NoSuchAlgorithmException, InvalidKeySpecException{

        if (publicKeyB64.contains("-----BEGIN PUBLIC KEY-----") || publicKeyB64.contains("-----END PUBLIC KEY-----"))
            publicKeyB64 = publicKeyB64.replace("-----BEGIN PUBLIC KEY-----", "").replace("-----END PUBLIC KEY-----", "");
        if (publicKeyB64.contains("-----BEGIN RSA PUBLIC KEY-----") || publicKeyB64.contains("-----END RSA PUBLIC KEY-----"))
            publicKeyB64 = publicKeyB64.replace("-----BEGIN RSA PUBLIC KEY-----", "").replace("-----END RSA PUBLIC KEY-----", "");

        // ok, you may need to use the Base64 decoder of bouncy or Android instead
        try{
            byte[] decoded = Base64.decode(publicKeyB64, Base64.DEFAULT);
            org.bouncycastle.asn1.pkcs.RSAPublicKey pkcs1PublicKey = org.bouncycastle.asn1.pkcs.RSAPublicKey.getInstance(decoded);
            BigInteger modulus = pkcs1PublicKey.getModulus();
            BigInteger publicExponent = pkcs1PublicKey.getPublicExponent();
            RSAPublicKeySpec keySpec = new RSAPublicKeySpec(modulus, publicExponent);
            KeyFactory kf = KeyFactory.getInstance("RSA");
            PublicKey generatedPublic = kf.generatePublic(keySpec);
            uk =generatedPublic;
           //uk is public variable in class and means public key
        }
        catch (Exception e){
            Log.i("your log","errro in dear function");
        }

    }

And this is my library:

compile "org.bouncycastle:bcprov-jdk15on:1.58"

compile "org.bouncycastle:bcpkix-jdk15on:1.58"

Community
  • 1
  • 1
m-tech
  • 338
  • 2
  • 14