我有一个网络应用程序,我正在尝试与 Java、Flutter 和加密一起使用。我在 Java 中使用 4096 位 RSA 随机生成的密钥对,我正在使用它来加密随机生成的 AES 256 位密钥
我只需要 Dart 代码,因为 Java 代码已经在工作了。
在Java中我使用这个类
/**
* 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;
}
在 Dart 中,我使用的是 PointyCastle 和这种方法;但是它不起作用
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);
}