Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在flatter中存储密钥对?_Android_Flutter_Dart_Encryption_Rsa - Fatal编程技术网

Android 如何在flatter中存储密钥对?

Android 如何在flatter中存储密钥对?,android,flutter,dart,encryption,rsa,Android,Flutter,Dart,Encryption,Rsa,我正在开发一个以Firebase为数据库的颤振消息传递应用程序。 为了加密两个用户之间发送的消息,我在应用程序开始时使用包生成公钥和私钥对 用于使用EncryptionData类生成密钥对的代码: import 'package:rsa_encrypt/rsa_encrypt.dart'; import 'package:pointycastle/api.dart' as crypto; Future<crypto.AsymmetricKeyPair> fu

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

用于使用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());
      }
     }
为了加密或解密字符串,我们使用来自同一个包的加密和解密方法。 futureKeyPair包含公钥和私钥,可以使用

    keyPair = await futureKeyPair();
如何在设备上安全地存储私钥以完成端到端加密。 这是我关于Stackoverflow的第一个问题。 很抱歉出现任何格式错误。

您可以使用共享首选项插件存储键和值,例如:

addStringToSF() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.setString('stringValue', "abc");
}
您可以使用shared_preferences插件存储键和值,例如:

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

Android具有密钥链和密钥库api:

iOS有钥匙链:

截至2020年12月,我还不知道有哪个flutter包对这些api进行了抽象


除非您想编写自己的软件包,否则您可能最想使用的软件包可能是将密钥对存储在android的Keystore和iOS的Keychain中,然后使用密钥加密数据,然后再存储在android的SharedReference中。只需查看代码了解详细信息。

Android具有密钥链和密钥库api:

iOS有钥匙链:

截至2020年12月,我还不知道有哪个flutter包对这些api进行了抽象


除非您想编写自己的软件包,否则您可能最想使用的软件包可能是将密钥对存储在android的Keystore和iOS的Keychain中,然后使用密钥加密数据,然后再存储在android的SharedReference中。请查看代码以了解详细信息。

我已经考虑过这一点,但认为会有更好的方法来存储密钥?如果您想在设备文件中存储具有值的密钥,这是最好的方法。存储具有共享首选项的密钥不是可变的,例如,如果用户重新安装应用程序或删除存储信息,密钥将丢失,任何新创建的密钥都会使以前加密的数据变得无用。那么解决这个问题的最佳方法是什么呢?那么你最好使用firebase实时数据库,并将其存储在那里我考虑过,但认为会有更好的方法存储密钥?如果你想在设备文件中存储具有值的密钥,这是最好的方法不会存储具有共享\u首选项的密钥是可变的,例如,如果用户重新安装应用程序或删除存储信息,则密钥将丢失,任何新创建的密钥都会使以前加密的数据无效。那么,解决这个问题的最佳方法是什么呢?那么您最好使用firebase实时数据库,并将其存储在那里