美文网首页
Flutter RSA加密、解密之我见二

Flutter RSA加密、解密之我见二

作者: 小王在努力 | 来源:发表于2020-05-26 15:46 被阅读0次

1、客户端掌握公钥,服务端掌握私钥

上一篇Flutter RSA加密、解密之我见一我们了解到客户端使用公钥加密,私钥解密。那么本文我们要介绍下,客户端掌握公钥、服务端掌握私钥。客户端公钥加密,服务端私钥解密;服务端私钥加密,客户端公钥解密。
安卓可以使用java Cipher,iOS 使用Openssl这个库,对于Flutter前端来说要怎么做。

2、flutter_cipher

引入flutter_cipher这个库

flutter_cipher: ^0.0.3

3、头文件引入

import 'package:flutter_cipher/flutter_cipher.dart';
import 'package:flutter/services.dart' show rootBundle;

4、分段加密实现

  static Future<String> encodeString(String content) async{
    var publicKeyStr = await rootBundle.loadString('assets/data/rsa_public_key.pem');
    var publicKey = RSAKeyParser().parse(publicKeyStr);
    Asymmetric rsa = Cipher.getAsymmetricInstance(RSA(publicKey: publicKey));

    int inputLen = content.length;
    int maxLen = 117;
    List<int> totalBytes = List();
    for (var i = 0; i < inputLen; i += maxLen) {
      int endLen = inputLen - i;
      String item;
      if (endLen > maxLen) {
        item = content.substring(i, i + maxLen);
      }
      else {
        item = content.substring(i, i + endLen);
      }
      totalBytes.addAll(rsa.encryptPublic(item).bytes);
    }
    return base64.encode(totalBytes);
  }

5、分段解密实现

  static Future<String> decodeString(String content) async{
    var publicKeyStr = await rootBundle.loadString('assets/data/rsa_public_key.pem');
    var publicKey =  RSAKeyParser().parse(publicKeyStr);
    Asymmetric rsa = Cipher.getAsymmetricInstance(RSA(publicKey: publicKey));

    Uint8List sourceBytes = base64.decode(content);
    int inputLen = sourceBytes.length;
    int maxLen = 128;
    String totalBytes = "";
    print("inputLen = $inputLen");
    for (var i = 0; i < inputLen; i += maxLen) {
      int endLen = inputLen - i;
      Uint8List item;
      if (endLen > maxLen) {
        item = sourceBytes.sublist(i, i + maxLen);
      } else {
        item = sourceBytes.sublist(i, i + endLen);
      }
      Encrypted en = Encrypted(item);
      String s =  rsa.decryptPublic(en);
      totalBytes = totalBytes + s;
    }
    return  totalBytes;
  }

5、总结

通过以上步骤,我们就可以实现当服务端掌握私钥,客户端掌握公钥;
客户端公钥加密,服务端私钥解密;
服务端私钥加密,客户端公钥解密。
这个问题

上一篇
Flutter RSA加密、解密之我见一

相关文章

  • Flutter RSA加密、解密之我见二

    1、客户端掌握公钥,服务端掌握私钥 上一篇Flutter RSA加密、解密之我见一我们了解到客户端使用公钥加密,私...

  • Flutter RSA加密、解密之我见一

    1、需要公钥和私钥 公钥内容: 私钥内容: 为了方便使用我们可以把他们放到两个不同文件中 2、导入依赖 3、导入头...

  • RSA加密方式

    RSA加密方式 获取RSA密钥 加密 解密 js库

  • kotlin版本RSA非对称加密解密与分段加密解密

    基于kotlin语言的RSA非对称加密解密与分段加密解密 RSA非对称加密 RSA非对称加密的具体算法与来源我就不...

  • iOS之密码学

    一、非对称加密 - RSA : +公钥加密,私钥解密; + 私钥加密,公钥解密; + 只能通过因式分解来破解 二、...

  • python操作RSA加密解密

    python操作RSA加密解密

  • java 加密解密帮助类

    一、MD5帮助类 二、AES加解密工具类 三、RSA加密解密类

  • Rsa加解密

    /*** Rsa 加解密* 用法:* (1)公钥加密,私钥解密* (2)私钥加密,公钥解密*/class ...

  • RSA加解密学习笔记

    RSA加解密简单说明: RSA是非对称加密方式,就是说加密解密不是同一个Key。私钥加密公钥解密,待加密的明文字节...

  • RSA加密

    RSA加密为非对称加密实现 对称加密:加密解密使用同一个算法 非对称加密:加密和解密使用不同算法 rsa加密原理 ...

网友评论

      本文标题:Flutter RSA加密、解密之我见二

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