You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中从RSA PEM私钥提取公钥(无需调用OpenSSL)

从RSA私钥(PEM格式)提取公钥(无需外部进程)

没问题!我常用Python的cryptography库来做这件事,完全不需要依赖OpenSSL这类外部命令,纯代码就能搞定。下面是具体步骤和示例:

1. 先安装依赖库

如果你还没装cryptography,先通过pip安装:

pip install cryptography

2. 代码实现示例

假设你的PEM私钥内容已经存在字符串里(或者可以从文件读取),代码如下:

from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.backends import default_backend

# 替换成你实际的PEM格式私钥内容
private_key_pem = """-----BEGIN RSA PRIVATE KEY-----
MIIJKQIBAAKCAgEA7drrGdj9TY6MZCm3kuCsXKVD2v5kUS38MCtA5PjGp72/A1IO
izG51WjyvCkULjBBQzOr366TcO5HtMzmVlipDzIFJdeQN2Z1gY5oVqA04zGlEAf4
vcgM0ygJLEbtcAYMZz/5Y5RgPqAnv3J3TiB82mbXURVg2PvHp7c+0Rl8vZmC4RIq
+DDkxXfccOFh8eaY4VYfIZPHsZZeX6ih+6JbuReCKU7zVPUMspefOyaMNj+NFeVN
XgKbt...
-----END RSA PRIVATE KEY-----"""

# 加载私钥(无密码则传None,有密码传入对应字节串)
private_key = serialization.load_pem_private_key(
    private_key_pem.encode(),
    password=None,
    backend=default_backend()
)

# 提取公钥并转为标准PEM格式
public_key = private_key.public_key()
public_key_pem = public_key.public_bytes(
    encoding=serialization.Encoding.PEM,
    format=serialization.PublicFormat.SubjectPublicKeyInfo
)

# 输出公钥(也可以写入文件)
print(public_key_pem.decode())

关键细节说明

  • 全程是进程内处理,不会启动任何外部进程,性能和安全性都更可控。
  • 如果你的私钥是加密带密码的,只需要在load_pem_private_key里传入password=b"你的密码"即可。
  • 导出的公钥是标准PEM格式,开头为-----BEGIN PUBLIC KEY-----,可以直接用于加密、签名验证等场景。

要是你用其他语言,比如Java的话,也可以用java.security包的KeyFactory类实现类似逻辑——加载私钥后提取公钥组件再导出,思路是一致的,只是语法不同而已。

内容的提问来源于stack exchange,提问作者VFein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:15:14