android - 如何在 flutter 中存储 key 对?

标签 android flutter dart encryption rsa

我正在开发一个以 Firebase 作为数据库的 Flutter 消息传递应用程序。
为了加密两个用户之间发送的消息,我使用了 rsa-encrypt包以在应用程序启动时生成公钥和私钥对。

用于使用 EncryptionData 类生成 key 对的代码:

    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 是这样的:
    void main(){
    EncryptFunctions encryptFunctions = new EncryptFunctions();
    futureKeyPair = encryptFunctions.getKeyPair();
    runApp(MyApp());
    }

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

如何将私钥安全地存储在设备上以完成端到端加密。
这是我在 Stackoverflow 上的第一个问题。
很抱歉任何格式错误。

最佳答案

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将 key 对存储在 Android 的 Keystore 和 iOS 的 Keychain 中的包,然后使用 key 加密数据,然后存储在 SharedPreference 中(在 Android 上)。只需查看代码以获取详细信息。

关于android - 如何在 flutter 中存储 key 对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61983145/

相关文章:

dart - html元素内的应用

android - 如何制作一个共享我的 res/raw/xxx.mp3 文件的按钮

android - 如果模型包含日期,则使用 Realm createObjectFromJson 创建对象会抛出异常

android - 如何将完整的android os作为图像文件?

flutter - 如何在 Dart 代码下方添加抽屉导航和银色 AppBar?

dart - 查看特定时间段的问候屏幕

flutter - 如何将可滚动小部件转换为图像?

java - 在应用程序中动态更改布局

flutter - 保存下拉按钮和文本字段选择的数据到列表中

list - 在 Flutter 中使用 Dart,如何添加到 map 列表内的 map 列表?