【问题标题】:How to store Keypairs in flutter?如何在颤动中存储密钥对?
【发布时间】:2020-09-10 22:54:07
【问题描述】:

我正在开发一个使用 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 是这样的:

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

为了加密或解密字符串,我们使用同一个包中的 encrypt() 和 decrypt() 方法。 futureKeyPair 包含可以使用

访问的公钥和私钥
    keyPair = await futureKeyPair();

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

【问题讨论】:

  • 你处理好了吗?我目前有同样的问题。会对您的解决方案感兴趣。

标签: android flutter dart encryption rsa


【解决方案1】:

Android 有 KeyChain 和 KeyStore api:

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

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

iOS 有钥匙串:

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

截至 2020 年 12 月,我不知道任何抽象这些 API 的颤振包。

除非您想编写自己的包,否则您可能想要使用的最接近的东西可能是flutter_secure_storage 包,它将密钥对存储在 Android 的 Keystore 和 iOS 的 Keychain 中,然后在存储之前使用密钥加密数据在 SharedPreference 中(在 Android 上)。详情请查看代码。

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多