首页 > 解决方案 > 在 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-----

标签: flutterdartcryptographydigital-signatureecdsa

解决方案


如果你喂

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 编码。现在您可以对任何您喜欢的密钥进行编码。


推荐阅读