如何在Flutter中存储密钥对?

3
我正在开发一个使用Firebase作为数据库的Flutter消息应用程序。 为了加密两个用户之间发送的消息,我使用了rsa-encrypt包来在应用程序启动时生成公钥和私钥对。
使用EncryptionData类生成密钥对的代码如下:
    import 'package:rsa_encrypt/rsa_encrypt.dart';
    import 'package:pointycastle/api.dart' as crypto;

    Future<crypto.AsymmetricKeyPair> futureKeyPair;
    crypto.AsymmetricKeyPair keyPair;

    class EncryptFunctions{

    Future<crypto.AsymmetricKeyPair<crypto.PublicKey,crypto.PrivateKey>> getKeyPair(){
      var helper = RsaKeyHelper();
      return helper.computeRSAKeyPair(helper.getSecureRandom());
      }
     }

Main.dart 大致如下所示:

Main.dart 是这样的:

    void main(){
    EncryptFunctions encryptFunctions = new EncryptFunctions();
    futureKeyPair = encryptFunctions.getKeyPair();
    runApp(MyApp());
    }

为了加密或解密字符串,我们使用同一包中的encrypt()和decrypt()方法。 futureKeyPair包含公钥和私钥,可以通过使用访问。
    keyPair = await futureKeyPair();

如何在设备上安全存储私钥以实现端到端加密。 这是我在Stackoverflow上的第一个问题。 对于任何格式错误,我表示抱歉。

你成功解决了这个问题吗?我目前也遇到了同样的问题。对你的解决方案很感兴趣。 - undefined
1个回答

0
Android有KeyChain和KeyStore API。

https://developer.android.com/reference/android/security/KeyChain

https://developer.android.com/training/articles/keystore.html

iOS有Keychain:

https://developer.apple.com/documentation/security/keychain_services

截至2020年12月,我不了解任何抽象这些API的Flutter包。

除非您想自己编写一个包,您可能希望使用的最接近的东西可能是flutter_secure_storage包,该包将密钥对存储在Android的Keystore中,存储在iOS的Keychain中,然后在存储在SharedPreference(在Android上)之前使用密钥加密数据。请查看代码以获取详细信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接