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

Rust中如何将rsa::RsaPublicKey(BigUint)转换为PEM格式并打印

解决方案

首先你需要先修改Cargo.toml配置,为rsa依赖启用PEM序列化相关的特性:

[dependencies]
rsa = { version = "=0.5.0", features = ["pem", "std"] }
rand = "=0.8"

你原本的报错原因是直接将RsaPublicKey结构体实例传给了只接受Vec<u8>参数的String::from_utf8方法,类型不匹配。rsa 0.5.0版本内置了PEM格式序列化能力,启用pem特性后可以直接调用内置方法得到PEM字符串,不需要手动处理n、e两个BigUint参数。

完整可用的代码示例如下:

use rsa::{PublicKey, RsaPrivateKey, RsaPublicKey};
use rand::rngs::OsRng;

fn main() {
    let mut rng = OsRng{};
    let bits = 2048;
    // 生成RSA密钥对
    let private_key = RsaPrivateKey::new(&mut rng, bits).expect("密钥生成失败");
    let public_key = RsaPublicKey::from(&private_key);

    // 输出公钥PEM(默认PKCS#1格式,开头为-----BEGIN RSA PUBLIC KEY-----)
    let public_key_pem = public_key.to_pem().expect("公钥转PEM格式失败");
    println!("公钥PEM内容:\n{}", public_key_pem);

    // 如需输出私钥PEM可调用以下方法
    let private_key_pem = private_key.to_pem().expect("私钥转PEM格式失败");
    println!("私钥PEM内容:\n{}", private_key_pem);
}

你提到的Rust Playground运行报错是因为Playground默认的rsa依赖没有启用pem特性,本地按上述配置修改后即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:06:03