之前一直在用RN开发应用,最近Flutter很火,就研究了下,而大家在开发与服务端做接口交互时,为了保证安全性,基本上都会使用加密方式来隐藏通讯内容,非对称加密方式,相比其他固定算法加密方式要安全很多,
非对称加密使用了私钥、公钥来分别对数据进行解密、加密操作,公钥做加密后的数据,只有私钥才能解密,因此会非常的安全。
Flutter使用的是Dart语言,Dart语言和Java非常的像,基本上会使用Java的程序员可以直接上手,部分查下就Ok了。
在Dart中,非对称加密可以使用 encrypt 包,可以直接在 pubspec.yaml 中增加 encrypt: ^2.0.0 即可完成包的引用,当然,不要忘记执行 packages get
做非对称加密,就必须要有公钥和私钥,特别注意一点,当前的 encrypt 为2.0.0版本,当前仅支持 PKCS#1文件格式的密钥
首先我们要生成私钥bash\nopenssl genrsa -out private_key.pem 4096这样就生成了一个私钥,而且就是PKCS#1格式的,如果有PKCS#8格式的,也可以用这个命令来转换为PKCS#1bash\nopenssl pkcs8 -in pkcs8_private_key.pem -nocrypt -out pkcs1_private_key.pem
第一个坑,在flutter中,密钥文件直接存放在目录中是无法使用File读取到的,只能放在asset中才可以,所以需要在 pubspec.yaml中增加相关密钥文件才行,例如将密钥文件存放在与 pubspec.yaml 同级的目录 keys 下,则需要在 pubspec.yaml 中增加如下代码
assets:
- keys/private_key.pem
- keys/public_key.pem
之后我们可以在代码中使用
String publicKeyString = await rootBundle.loadString('keys/public_key.pem');
来获取到公钥的文本,再通过