当前位置:首页 > C# > 正文

C#实现RSA非对称加密解密(小白也能看懂的详细教程)

在现代软件开发中,C# RSA加密是一种非常重要的安全技术。本文将带你从零开始,手把手教你如何在C#中使用RSA非对称加密来保护你的敏感数据。无论你是刚入门的新手,还是有一定经验的开发者,都能轻松掌握。

C#实现RSA非对称加密解密(小白也能看懂的详细教程) C# RSA加密 RSA非对称加密 C#数据加密解密 RSA加解密教程 第1张

什么是RSA非对称加密?

RSA是一种非对称加密算法,它使用一对密钥:公钥(Public Key)和私钥(Private Key)。公钥可以公开给任何人用于加密数据,而只有持有私钥的人才能解密这些数据。这种机制非常适合用于安全通信、数字签名等场景。

准备工作

在开始编码前,请确保你已安装以下环境:

  • .NET Framework 4.6 或更高版本(或 .NET Core / .NET 5+)
  • Visual Studio 或其他 C# 开发工具

第一步:生成RSA密钥对

我们首先需要生成一对公钥和私钥。C# 提供了 RSA 类来完成这项工作。

using System;using System.Security.Cryptography;using System.Text;public class RsaHelper{    public static (string publicKey, string privateKey) GenerateKeyPair()    {        using (var rsa = RSA.Create())        {            // 设置密钥长度(建议至少2048位)            rsa.KeySize = 2048;            // 导出公钥和私钥(以XML格式)            string publicKey = rsa.ToXmlString(false);  // false 表示只导出公钥            string privateKey = rsa.ToXmlString(true);  // true 表示导出私钥            return (publicKey, privateKey);        }    }}

第二步:使用公钥加密数据

有了公钥后,我们就可以用它来加密字符串或其他数据。

public static byte[] Encrypt(string plainText, string publicKey){    using (var rsa = RSA.Create())    {        rsa.FromXmlString(publicKey);        byte[] data = Encoding.UTF8.GetBytes(plainText);        // 使用OAEP填充(更安全)        return rsa.Encrypt(data, RSAEncryptionPadding.OaepSHA256);    }}

第三步:使用私钥解密数据

只有拥有私钥的一方才能解密被公钥加密的数据。

public static string Decrypt(byte[] cipherData, string privateKey){    using (var rsa = RSA.Create())    {        rsa.FromXmlString(privateKey);        byte[] decryptedData = rsa.Decrypt(cipherData, RSAEncryptionPadding.OaepSHA256);        return Encoding.UTF8.GetString(decryptedData);    }}

完整示例:加密并解密一段文本

class Program{    static void Main(string[] args)    {        // 1. 生成密钥对        var (publicKey, privateKey) = RsaHelper.GenerateKeyPair();        // 2. 原始明文        string originalText = "Hello, 这是一段需要加密的敏感信息!";        Console.WriteLine($"原始文本: {originalText}");        // 3. 使用公钥加密        byte[] encryptedData = RsaHelper.Encrypt(originalText, publicKey);        Console.WriteLine($"加密后数据长度: {encryptedData.Length} 字节");        // 4. 使用私钥解密        string decryptedText = RsaHelper.Decrypt(encryptedData, privateKey);        Console.WriteLine($"解密后文本: {decryptedText}");        // 验证是否一致        Console.WriteLine($"解密成功: {originalText == decryptedText}");    }}

注意事项与最佳实践

  • 密钥长度:建议使用2048位或更高,1024位已被认为不够安全。
  • 填充方式:务必使用 RSAEncryptionPadding.OaepSHA256 等安全填充模式,避免使用 PKCS#1 v1.5(易受攻击)。
  • 数据长度限制:RSA不能直接加密大文件。通常用于加密一个对称密钥(如AES),再用该密钥加密实际数据。
  • 密钥存储:私钥必须严格保密,可存储在安全的密钥库(如Windows Certificate Store)中。

总结

通过本教程,你已经学会了如何在C#中实现RSA非对称加密和解密。这项技术是构建安全应用的基础,广泛应用于登录认证、API通信、数字签名等场景。掌握C#数据加密解密技能,能让你的程序更加安全可靠。

希望这篇RSA加解密教程对你有帮助!如果你有任何问题,欢迎在评论区留言交流。