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

