如何在.NET Core中使用OpenSSL?安装NuGet包后使用方法咨询
System.Security.Cryptography.OpenSsl 实用使用指南
这个包是.NET生态对原生OpenSSL加密能力的封装,仅在Linux、macOS等类Unix系统下生效,Windows环境下运行时会自动切换为系统内置的CNG加密实现,无需额外修改代码即可实现跨平台兼容。
1. 常用使用示例
生成RSA密钥对
// 推荐使用工厂方法创建实例,自动适配当前系统加密实现 using RSA rsa = RSA.Create(2048); // 密钥长度2048位,可根据需求调整 // 导出公钥PEM格式 string publicKeyPem = rsa.ExportSubjectPublicKeyInfoPem(); // 导出私钥PEM格式(敏感信息,注意加密存储) string privateKeyPem = rsa.ExportPkcs8PrivateKeyPem();
如果需要强制指定使用OpenSSL实现,可以直接实例化:
using RSA rsa = new RSAOpenSsl(2048);
RSA加密解密
// 加密:默认使用OAEP填充,兼容性更高 byte[] plainData = System.Text.Encoding.UTF8.GetBytes("待加密的测试文本"); byte[] encryptedData = rsa.Encrypt(plainData, RSAEncryptionPadding.OaepSHA256); // 解密 byte[] decryptedData = rsa.Decrypt(encryptedData, RSAEncryptionPadding.OaepSHA256); string decryptedText = System.Text.Encoding.UTF8.GetString(decryptedData);
计算文件哈希值
using var sha256 = SHA256.Create(); using var fileStream = File.OpenRead("待计算哈希的文件路径"); byte[] hashBytes = sha256.ComputeHash(fileStream); string hashHex = Convert.ToHexString(hashBytes).ToLower(); // 转为小写16进制哈希值
数字签名与验签
// 待签名的数据 byte[] data = System.Text.Encoding.UTF8.GetBytes("待签名的内容"); // 签名 byte[] signature = rsa.SignData(data, HashAlgorithmName.SHA256, RSASignaturePadding.Pss); // 验签,使用公钥实例进行验证 bool isValid = rsa.VerifyData(data, signature, HashAlgorithmName.SHA256, RSASignaturePadding.Pss);
2. 注意事项
- 无跨平台强制要求时,不要直接实例化
RSAOpenSsl、SHA256OpenSsl等带OpenSsl后缀的类,推荐使用RSA.Create()、SHA256.Create()等工厂方法,运行时会自动匹配当前系统最优实现,无需处理平台兼容问题 - 密钥导出导入优先使用内置的PEM系列方法(.NET 5及以上版本支持),不需要手动拼接PEM格式头尾字符串
- 所有加密类都实现了
IDisposable接口,使用时建议用using语句包裹,自动释放非托管资源,避免内存泄漏
内容的提问来源于stack exchange,提问作者thonfun
相关产品推荐
相关产品推荐

