问题描述:通常rsa加密的公钥放在客户端,私钥放在服务器,这里只对公钥简单说明
测试所需公钥,私钥或者测试自己的加密是否有问题,可以在线生成公钥私钥以及检测:https://www.bejson.com/enc/rsa/
1.rsa加密所需的库:
在 pubspec.yaml引入下面的库,记得pub get
encrypt: ^4.1.0
2.公钥存放
我的存放在资源文件下面如下:
assets/rsa/public.pem,且需要pubspec.yaml导入:- assets/rsa/public.pem
注意下public.pem格式如下:(标红的不能省略,中间的是公钥)
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy3lnBWEFAJIr3mRJZM6Y
80XiFDUAXQa3tn08HLEG3TT5sVL8S6ISubExu/fL7KQz+DvCo7S0z9hMEHaUdxnF
UXiiuxwbCJLP0lLiksdDN1hh9HiCLFvVC2yFGX61GfPiqcFk8Cn/b7r/wM5CZBLZ
EobxGPTxhQ7SoexHQI33rCVWjYdQLCm1NFzarlJCnTMdxHV+7MtgcSJ3j3hXgpzq
9N1Ojc0uFZFbylQgstcEzhKe0OsS1BIF1hBGZ1DCImD9oiXrYUTdDEwoDzyYxSfe
+sky47sYRiBGWQBZfLuo3JMX6823/c4T9Gmz/BEMXRoGB8bA9w4L5G2wY+I9XdCQ
9QIDAQAB
-----END PUBLIC KEY-----
3.代码片段
需要导入的库:
import 'package:encrypt/encrypt.dart';
Future<String> getPubkey() async {
final publicPem = await rootBundle.loadString('assets/rsa/public.pem');
var parse = RSAKeyParser().parse(publicPem);
final encrypter = Encrypter(RSA(publicKey: parse));
final encrypted = encrypter.encrypt(new DateTime.now().millisecondsSinceEpoch.toString());
return encrypted.base64;//加密后内容可以在线解析或者自行解析
}