如何在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
相关产品推荐
相关产品推荐

