I have a network app that I'm trying to use with Java and Flutter and encryption. I'm using a 4096 bit RSA randomly generated keypair in Java and I'm using it to encrypt a randomly generated AES 256 bit key
I only need the Dart code as the Java code is already working.
In Java I am using this class
/**
* Create a key pair
* @return The pair
*/
public static KeyPair generateKeyPairs() {
KeyPairGenerator keyGen;
try {
keyGen = KeyPairGenerator.getInstance("RSA");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
keyGen.initialize(4096);
return keyGen.generateKeyPair();
}
public static String toBase64(Key publicKey) {
byte[] encodedPublicKey = publicKey.getEncoded();
return Base64.getEncoder().encodeToString(encodedPublicKey);
}
public static PublicKey toPublicKey(String base64PublicKey){
PublicKey publicKey;
try{
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(base64PublicKey.getBytes()));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
publicKey = keyFactory.generatePublic(keySpec);
return publicKey;
} catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
e.printStackTrace();
}
return null;
}
In Dart I am using PointyCastle and this method; however it doesn't work
static RSAAsymmetricKey rsaPublicKeyFromString(String key) {
String keyWithHeader = "-----BEGIN RSA PUBLIC KEY-----\n" + utf8.decode(base64Decode(key)) + "\n-----END RSA PUBLIC KEY-----";
return RSAKeyParser().parse(keyWithHeader);
}