当前位置: 首页 > news >正文

Flutter RSA公钥转PEM

需添加依赖:pointycastle​​​​​​​

参考链接:https://github.com/bcgit/pc-dart/issues/165 

import 'dart:convert';
import 'dart:typed_data';import 'package:pointycastle/pointycastle.dart';
import 'package:pointycastle/src/platform_check/platform_check.dart';
import "package:pointycastle/export.dart";class RSAUtils {////// [生成RSA公私密钥对](https://github.com/bcgit/pc-dart/blob/master/tutorials/rsa.md)///static AsymmetricKeyPair<RSAPublicKey, RSAPrivateKey> generateKeyPair({int bitLength = 2048}) {final keyGen = RSAKeyGenerator();//初始化final secureRandom = SecureRandom('Fortuna')..seed(KeyParameter(Platform.instance.platformEntropySource().getBytes(32)));keyGen.init(ParametersWithRandom(RSAKeyGeneratorParameters(BigInt.parse('65537'), bitLength, 64),secureRandom));final pair = keyGen.generateKeyPair();final myPublic = pair.publicKey as RSAPublicKey;final myPrivate = pair.privateKey as RSAPrivateKey;return AsymmetricKeyPair<RSAPublicKey, RSAPrivateKey>(myPublic, myPrivate);}/// https://github.com/bcgit/pc-dart/blob/master/tutorials/asn1.md/// https://github.com/bcgit/pc-dart/issues/165static String publicKey2PemString(RSAPublicKey publicKey) {const beginPublicKey = '-----BEGIN PUBLIC KEY-----';const endPublicKey = '-----END PUBLIC KEY-----';// Create the top level sequencevar topLevelSeq = ASN1Sequence();// Create the sequence holding the algorithm informationvar algorithmSeq = ASN1Sequence();var paramsAsn1Obj = ASN1Object.fromBytes(Uint8List.fromList([0x5, 0x0]));algorithmSeq.add(ASN1ObjectIdentifier.fromIdentifierString('1.2.840.113549.1.1.1'));algorithmSeq.add(paramsAsn1Obj);// Create the constructed ASN1BitString/*var modulus = ASN1Integer(publicKey.modulus);var exponent = ASN1Integer(publicKey.exponent);var publicKeySeqBitString = ASN1BitString(elements : [modulus, exponent], tag: ASN1Tags.BIT_STRING_CONSTRUCTED);*/var keySequence = ASN1Sequence();keySequence.add(ASN1Integer(publicKey.modulus));keySequence.add(ASN1Integer(publicKey.exponent));keySequence.encode(encodingRule: ASN1EncodingRule.ENCODING_DER);var publicKeySeqBitString = ASN1BitString(stringValues: keySequence.encodedBytes!);// Add ASN1 objects to the top level sequencetopLevelSeq.add(algorithmSeq);topLevelSeq.add(publicKeySeqBitString);// topLevelSeq.encode();// Encode base64var dataBase64 = base64.encode(topLevelSeq.encodedBytes!);var chunks = _chunk(dataBase64, 64);return '$beginPublicKey\n${chunks.join('\n')}\n$endPublicKey';}static List<String> _chunk(String s, int chunkSize) {var chunked = <String>[];for (var i = 0; i < s.length; i += chunkSize) {var end = (i + chunkSize < s.length) ? i + chunkSize : s.length;chunked.add(s.substring(i, end));}return chunked;}
}

相关文章:

  • IntelliJ IDEA社区版在Windows电脑中的下载、安装方法
  • 【IT领域新生必看】编程中的错误处理大师:解密 `throw` 和 `throws` 的神秘差异
  • 【安全设备】数据库审计
  • vue 路由
  • JavaSE学习笔记第二弹——对象和多态(下)
  • 等保测评视角下的哈尔滨智慧城市安全框架构建
  • 2019年美赛题目Problem A: Game of Ecology
  • 硅纪元AI应用推荐 | 百度橙篇成新宠,能写万字长文
  • C++ 判断语句的深入解析
  • 【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第十八章 Linux编写第一个自己的命令
  • PageDTO<T>,PageQuery,BeanUtils,CollUtils的封装
  • openfoam生成的非均匀固体Solid数据分析、VTK数据格式分析、以及paraview官方用户指导文档和使用方法
  • 昇思15天
  • sdwan是硬件还是网络协议?
  • html+css+js仿黑客帝国代码雨
  • CentOS7简单部署NFS
  • ES6之路之模块详解
  • exports和module.exports
  • FastReport在线报表设计器工作原理
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • Java应用性能调优
  • Joomla 2.x, 3.x useful code cheatsheet
  • js继承的实现方法
  • JS字符串转数字方法总结
  • MaxCompute访问TableStore(OTS) 数据
  • php中curl和soap方式请求服务超时问题
  • Python实现BT种子转化为磁力链接【实战】
  • Webpack 4x 之路 ( 四 )
  • webpack入门学习手记(二)
  • WebSocket使用
  • 不上全站https的网站你们就等着被恶心死吧
  • 彻底搞懂浏览器Event-loop
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 算法-插入排序
  • 我感觉这是史上最牛的防sql注入方法类
  • 智能网联汽车信息安全
  • HanLP分词命名实体提取详解
  • 数据库巡检项
  • ​Python 3 新特性:类型注解
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #1014 : Trie树
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • (02)vite环境变量配置
  • (C语言)字符分类函数
  • (MATLAB)第五章-矩阵运算
  • (含笔试题)深度解析数据在内存中的存储
  • (南京观海微电子)——示波器使用介绍
  • (详细文档!)javaswing图书管理系统+mysql数据库
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • .bat文件调用java类的main方法
  • .NET C# 使用 iText 生成PDF
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .Net的C#语言取月份数值对应的MonthName值
  • .Net开发笔记(二十)创建一个需要授权的第三方组件