📜  c# rsa 示例 - C# (1)

📅  最后修改于: 2023-12-03 14:39:43.959000             🧑  作者: Mango

C# RSA 示例

在计算机网络通信中,数据传输的过程中需要一定的安全保障。RSA是一种非对称加密算法,常用于数据传输中的加密和解密。本文将为大家分享C#中使用RSA加密算法的示例。

配置环境

在C#中使用RSA加密算法,需要引入System.Security.Cryptography命名空间。在Visual Studio中,打开“解决方案资源管理器”,右键单击“引用”,选择“管理 NuGet 程序包”,在搜索栏中输入“System.Security.Cryptography”,选择对应的安装包进行安装。

示例代码

下面是使用C#实现RSA加密算法的示例代码:

using System;
using System.Security.Cryptography;
using System.Text;

namespace RSAExample
{
    class Program
    {
        private static string publicKey; // 公钥
        private static string privateKey; // 私钥

        static void Main(string[] args)
        {
            // 生成RSA密钥对
            GenerateKeys();

            // 待加密的字符串
            string str = "Hello, RSA!";

            // 使用公钥加密
            string encryptedStr = EncryptString(str, publicKey);
            Console.WriteLine($"加密前的字符串:{str}");
            Console.WriteLine($"加密后的字符串:{encryptedStr}");

            // 使用私钥解密
            string decryptedStr = DecryptString(encryptedStr, privateKey);
            Console.WriteLine($"解密后的字符串:{decryptedStr}");

            Console.ReadKey();
        }

        // 生成RSA密钥对
        static void GenerateKeys()
        {
            using (var rsa = new RSACryptoServiceProvider(1024))
            {
                publicKey = rsa.ToXmlString(false); // 公钥
                privateKey = rsa.ToXmlString(true); // 私钥
            }
        }

        // 使用公钥加密字符串
        static string EncryptString(string str, string publicKey)
        {
            byte[] data = Encoding.UTF8.GetBytes(str); // 将文本转换为字节数组

            using (var rsa = new RSACryptoServiceProvider())
            {
                rsa.FromXmlString(publicKey); // 设置公钥
                byte[] encryptedData = rsa.Encrypt(data, true); // 加密
                return Convert.ToBase64String(encryptedData); // 将加密后的字节数组转换为Base64字符串
            }
        }

        // 使用私钥解密字符串
        static string DecryptString(string str, string privateKey)
        {
            byte[] encryptedData = Convert.FromBase64String(str); // 将Base64字符串转换为字节数组

            using (var rsa = new RSACryptoServiceProvider())
            {
                rsa.FromXmlString(privateKey); // 设置私钥
                byte[] decryptedData = rsa.Decrypt(encryptedData, true); // 解密
                return Encoding.UTF8.GetString(decryptedData); // 将解密后的字节数组转换为文本
            }
        }
    }
}
代码说明

以上示例代码中,定义了一个Program类,包含了四个方法和两个成员变量publicKeyprivateKey

  1. GenerateKeys方法用于生成RSA密钥对,使用RSACryptoServiceProvider类创建一个1024位长的RSA实例,并调用ToXmlString方法分别获取公钥和私钥,保存在publicKeyprivateKey成员变量中。

  2. EncryptString方法用于使用公钥加密字符串。该方法首先将文本转换为字节数组,然后创建一个新的RSA实例,并使用FromXmlString方法设置公钥。调用Encrypt方法对字节数组进行加密,接着将加密后的字节数组转换为Base64字符串返回。

  3. DecryptString方法用于使用私钥解密字符串。该方法首先将Base64字符串转换为字节数组,然后创建一个新的RSA实例,并使用FromXmlString方法设置私钥。调用Decrypt方法对字节数组进行解密,接着将解密后的字节数组转换为文本返回。

  4. Main方法为程序入口,使用GenerateKeys方法生成RSA密钥对后,使用EncryptString方法对字符串进行加密,然后使用DecryptString方法对加密后的字符串进行解密,最后在控制台上输出加密前、加密后和解密后的字符串。

运行结果

运行以上示例代码,输出结果如下:

加密前的字符串:Hello, RSA!
加密后的字符串:D+cvUb5smw+Bax6CCXWzr70wOI4do0GOmK4cLpZKAywej3QcySsFsvNWO+wECvRTXf9sGvhyYBcHo55AYL9QOei8R5Zu48S7QeDjXieGvbCSXME7Hk+RQXye9ICBB+KkWU8syexwywv/vyJtiNwTRKWIQoyt1tzegq8ZMW0VbOI=
解密后的字符串:Hello, RSA!
总结

本文分享了使用C#实现RSA加密算法的示例代码,并对代码进行了详细说明。希望读者能够通过本文学习到如何使用C#进行RSA加密和解密操作。