rsa加密

注意rsa格式  RSA/ECB/PKCS1Padding

  #rsa加密解密
  fast_rsa: ^3.8.3

 

    var pkcs12 = '''MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIs**************PD4DQIDAQAB''';
    var publicKey = _transformPem(pkcs12, isPublic: true);
    var password = await RSA.encryptPKCS1v15("1234abcd", publicKey);

 

 

字符串生成pem字符串  下面的工具里是 PKCS8

https://github.com/Fitem/flutter_util_code/blob/master/lib/encrypt_utils.dart

 

下面的方法str传入下面格式的字符串 MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQ*************+HFpaInhbf05O4OfpAuMwq+FPD4DQIDAQAB

  /// 把秘钥从字符串转成PEM文件格式
  /// [str]秘钥,字符串
  /// [isPublic]是否是公钥
  static String _transformPem(String str, {bool isPublic = true}) {
    var begin = isPublic ? '-----BEGIN PUBLIC KEY-----\n' : "-----BEGIN PRIVATE KEY-----\n";
    var end = isPublic ? '\n-----END PUBLIC KEY-----' : '\n-----END PRIVATE KEY-----';
    // 如果已经是PEM格式的秘钥,直接返回
    if (str.contains(begin) && str.contains(end)) return str;
    // 去掉空格和换行
    str.replaceAll(' ', '').replaceAll('\n', '');

    int splitCount = str.length ~/ 64;
    List<String> strList = [];

    for (int i = 0; i < splitCount; i++) {
      strList.add(str.substring(64 * i, 64 * (i + 1)));
    }
    if (str.length % 64 != 0) {
      strList.add(str.substring(64 * splitCount));
    }

    return begin + strList.join('\n') + end;
  }

 

posted @ 2025-06-12 09:17  黄增松  阅读(17)  评论(0)    收藏  举报