flutter - 在 Dart 中将 ECPrivateKey/ECPublicKey 转换为 PEM 字符串
问题描述
我有一个 ECPrivateKey/ECPublicKey,想将其转换为 PEM 字符串,如下所示
公钥:
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEnd21ku0m+VZvM3tJAP3IIM3XXGla
PM2zhRura+/qioJoUwDK7qLbuFzcmbHHx6ELnXFXgAjDbZgFyMdfcm1ugw==
-----END PUBLIC KEY-----
私钥:
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg2sfmpsl894GDcNOl
vzKW0gzf/b8XvQigr/rZGSjKydqhRANCAASd3bWS7Sb5Vm8ze0kA/cggzddcaVo8
zbOFG6tr7+qKgmhTAMruotu4XNyZscfHoQudcVeACMNtmAXIx19ybW6D
-----END PRIVATE KEY-----
解决方案
如果你喂
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEnd21ku0m+VZvM3tJAP3IIM3XXGla PM2zhRura+/qioJoUwDK7qLbuFzcmbHHx6ELnXFXgAjDbZgFyMdfcm1ugw==
进入这样的 ASN.1 解析器,您会发现它只是几个 oid(包括曲线)和密钥的 R/S 值的 Base64/ASN.1 编码。该编码在 PKCS#8 规范中进行了描述。
SEQUENCE (2 elem) SEQUENCE (2 elem)
OBJECT IDENTIFIER 1.2.840.10045.2.1 ecPublicKey (ANSI X9.62 public key type)
OBJECT IDENTIFIER 1.2.840.10045.3.1.7 prime256v1 (ANSI X9.62 named elliptic curve)
BIT STRING (520 bit) 0000010010011101110111011011010110010010111011010010011011111001010101…
使用Dart ASN 编码器/解码器包首先对上面的示例进行解码,以探索 ASN 组件的顺序和嵌套。然后反转该过程并使用库的编码器部分对其进行重新编码,并断言您将获得与开始时相同的 BER 编码。现在您可以对任何您喜欢的密钥进行编码。
推荐阅读
- python - 数学指数函数 int 属性错误
- c# - 如何将 Skype4Business 主窗口停靠到父应用程序
- angular - 回调中组件属性更改时绑定不更新
- python - 如何在python中设置类属性
- python - 我无法在 django tinyMCE 中转义 html
- java - 如何修复对话流身份验证问题
- asp.net - ASP.NET MVC5 中的视图绑定列表
- python - 从目录安装所有 whl 文件
- java - Camel - 基于查询的 RoutePolicy
- google-apps-script - 在将电子表格复制到新文件夹时,为绑定脚本分配权限以访问用户的谷歌服务