我正在开发一个以 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/