路遥工具箱今日新增以下功能:
- RSA 密钥生成
- RSA 格式转换
不同于其他工具,路遥工具箱的 RSA 密钥工具为 .NET 开发人员提供了更为强力的支撑。
路遥工具箱 RSA 工具集的特点
路遥工具箱是一个客户端应用,其绝大部分功能都是无需联网的,RSA 工具集也包含在内。所有的数据都在本机处理,保证不会经由网络泄漏。
RSA 密钥生成功能支持 512、1024、2048、4096 三种长度的密钥生成,除了提供常规的 PKCS#1 和 PKCS#8 格式之外,还支持了 .NET 平台特有的 XML 格式导出:
RSA 密钥转换功能支持将 PKCS#1、PKCS#8 和 XML 格式的私钥进行格式转换,并支持公钥提取功能(也支持提取 XML 格式的公钥)。
该转换器会自动识别私钥的格式,而无需手动选择。
如何使用 C# 识别私钥的格式
判断私钥是否为 XML 格式,仅需要检查私钥开头是否为 <RSAKeyValue>
即可。PEM 格式的私钥需要对私钥内容掐头去尾,只保留中间的 BASE64 部分内容。
要判断一个私钥是 PKCS#1 还是 PKCS#8 格式,需要将 BASE64 解码为二进制后查看其第 8 个字节。如果该字节的取值是 0x30 则代表这是一个 PKCS#8 格式的私钥,如果是 0x02 则代表格式为 PKCS#1 。实现代码如下:
public static RSA CreateRsa(string key) { if (string.IsNullOrWhiteSpace(key)) throw new Exception("私钥不能为空"); //<RSAKeyValue> var rsa = RSA.Create(); if (key.StartsWith("<RSAKeyValue>")) { rsa.FromXmlString(key); } else { if (Regex.IsMatch(key, @"^[-]+BEGIN")) { key = Regex.Match(key, @"(?<=KEY[-]+[\r\n]+)[\s\S]+(?=[\r\n]+[-]+END)").Value; key = Regex.Replace(key, @"[\r\n]+", string.Empty); } var bytes = Convert.FromBase64String(key); if (bytes.Length < 8) throw new Exception("私钥长度过短"); switch (bytes[7]) { case 0x30://PKCS8 rsa.ImportPkcs8PrivateKey(bytes, out _); break; case 0x02://PKCS1 rsa.ImportRSAPrivateKey(bytes, out _); break; default: throw new Exception("仅支持 PKCS#1 和 PKCS#8 格式的 RSA 私钥。"); } } return rsa; }
以上代码需要在 .NET Standard 2.1 框架以上运行。
下载路遥工具箱
路遥工具箱下载地址:路遥工具箱