如何在颤动中存储密钥对?

时间:2020-05-24 07:59:10

标签: android flutter dart encryption rsa

我正在使用Firebase作为数据库的Flutter消息传递应用程序上工作。 为了加密2个用户之间发送的消息,我使用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());
    }

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

进行访问
    keyPair = await futureKeyPair();

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

2 个答案:

答案 0 :(得分:1)

您可以使用shared_preferences插件来存储键和值,例如:

addStringToSF() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.setString('stringValue', "abc");
}

https://pub.dev/packages/shared_preferences

答案 1 :(得分:0)

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 月,我不知道有任何 Flutter 包可以抽象这些 API。

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