美文网首页
Flutter加密插件 2022-06-05 周日

Flutter加密插件 2022-06-05 周日

作者: 松哥888 | 来源:发表于2022-06-05 16:54 被阅读0次

现实需求

登录的时候需要输入用户名和密码。密码不能直接传给后台,应该先进行加密。
常用的加密方式有对称加密:比如AES;不对称加密:比如RSA
这里选用的是RSA不对称加密方式

插件

一般情况,这种加解密用第三方插件比较多,很少自己写。

  • 引入
encrypt: ^5.0.1
  • 使用
import 'package:encrypt/encrypt.dart';
import 'package:pointycastle/asymmetric/api.dart';

class EncryptUtil {
  ///  加密
  static String encryption(String content, String publicKeyString) {
    final parser = RSAKeyParser();
    RSAPublicKey publicKey = parser.parse(publicKeyString) as RSAPublicKey;
    final encrypter = Encrypter(RSA(publicKey: publicKey));
    return encrypter.encrypt(content).base64;
  }

}

公钥

  • 一种方式是以.pem文件的格式放在本地,那么就有一个读取.pem文件的过程

  • 另外一种是以接口的形式从后台拿,一般这种方式比较普遍。这个时候,需要在后台给的公钥字符串前后添加头和尾。

pubKeyString = '''
-----BEGIN PUBLIC KEY-----
$pubKeyFromBackground
-----END PUBLIC KEY-----
''';

关于接口

一般来说,加解密,只要一个字符串变换的函数就可以了,但是这个插件却引入很多自定义的类,所以需要转变一下思路。

  • RSAPublicKey;RSAPrivateKey;RSAKeyParser

这几个是用来处理RSA加解密中的秘钥的。读取.pem文件,或者从后台拿,扥到的公钥一般是字符串的格式。RSAKeyParser的作用就是将字符串格式的公钥转变为RSAPublicKey结构。

  • RSA这个结构代表RSA加解密算法。从它的构造函数可以看出,有公钥,私钥,编码方式几个参数。对于客户端来说,大多数情况,只要一个公钥RSAPublicKey就可以了。
RSA(
      {RSAPublicKey? publicKey,
      RSAPrivateKey? privateKey,
      RSAEncoding encoding = RSAEncoding.PKCS1})
  • Encrypter这个结构可以看做是加解密的具体执行者,其构造函数需要提供一个算法,比如上面提到的RSA

  • Encrypted加密后的产物。这里要注意的是这并不是通常所理解的加密字符串。需要再增加一步,调用其get方法base64才能得到base64格式的加密字符串。

一个字符串到字符串之间变换,中间经过了这么多自定义的类,所以需要花点时间消化一下。

参考文章

encrypt: ^5.0.1;
Flutter RSA加密解密的示例代码

其他插件

mz_rsa_plugin: ^0.0.4

  • 这个插件就支持RSA

  • 有点是接口简单好用:

    //Encrypt string by public key,the public key is String (使用公钥加密字符串,公钥是字符串)
    var str1 = await MzRsaPlugin.encryptStringByPublicKey(originText, PUBLICK_KEY);
    // Decrypt the encrypted string by private key, the private key is String(使用私钥解密公钥加密过的字符串,私钥是字符串)
    var str2 = await MzRsaPlugin.decryptStringByPrivateKey(str1, PRIVART_KEY);
  • 在iOS下可以正常使用,但是据说在Android下回崩溃,原因还不知道。所以这个插件的流行程度不如encrypt

  • Flutter RSA加解密插件

相关文章

网友评论

      本文标题:Flutter加密插件 2022-06-05 周日

      本文链接:https://www.haomeiwen.com/subject/wsbrmrtx.html