[Flutter]: 如何从 x509 证书 PEM 字符串中获取 public 密钥 PEM 字符串

[Flutter]: How to get public key PEM string from the x509 certificate PEM string

我需要从 x509 证书 PEM 字符串中提取 Public 密钥的 PEM 字符串的方法。 现在我正在使用 basic_utils 包,它可以从给定的 PEM 字符串生成 x509Certificate 对象。 此 x509Certificate 对象具有 publicKeyData 字段和 bytes 字段,将 public 密钥字节表示为字符串。 但是我不能使用这个 bytes 生成 public 密钥的有效 PEM 字符串。

所以问题是 - 如何从证书中提取 public 密钥作为 PEM 字符串?

谢谢

对于 RSA public 密钥:

import 'package:convert/convert.dart';
import 'package:basic_utils/basic_utils.dart';

final bytes = hex.decode(cert.publicKeyData.bytes!);
final key = CryptoUtils.rsaPublicKeyFromDERBytes(Uint8List.fromList(bytes));
final pem = CryptoUtils.encodeRSAPublicKeyToPemPkcs1(key);

Pkcs1 版本的编码器将用 BEGIN RSA PUBLIC KEY 括起 PEM 而非 pkcs1 版本将使用 BEGIN PUBLIC KEY.