C# rsa/ecb/padding1算法使用示例
时间: 2024-12-01 08:20:40 浏览: 18
在C#中,RSA(Rivest–Shamir–Adleman)是一种非对称加密算法,ECB(Electronic Codebook,电子密码本模式)是一种加密模式,而Padding1通常指的是PKCS#1中的第一种填充方法(也称为PKCS7或NO Padding)。下面是一个简单的示例,展示如何使用这些组件进行加解密:
首先确保已安装`System.Security.Cryptography`命名空间,这个命名空间包含了处理加密和解密操作所需的类。
```csharp
using System;
using System.IO;
using System.Security.Cryptography;
public class RsaExample
{
public static void Main(string[] args)
{
// RSA密钥生成
using (RSA rsa = GenerateKeyPair())
{
string publicKeyString = rsa.ToXmlString(false); // 公钥
string privateKeyString = rsa.ToXmlString(true); // 私钥
// 使用公钥加密
string plainText = "Hello, world!";
byte[] encryptedData = Encrypt(rsa.PublicKey, Encoding.UTF8.GetBytes(plainText), PaddingMode.Pkcs1);
// 使用私钥解密
string decryptedText = Decrypt(rsa.PrivateKey, encryptedData).ToString();
Console.WriteLine($"原文: {plainText}");
Console.WriteLine($"加密后: {Convert.ToBase64String(encryptedData)}");
Console.WriteLine($"解密后: {decryptedText}");
}
}
// 生成RSA密钥对
private static RSACryptoServiceProvider GenerateKeyPair()
{
var keyPairGenerator = new RSACryptoServiceProvider();
return keyPairGenerator;
}
// 加密数据
public static byte[] Encrypt(RSACryptoServiceProvider rsa, byte[] data, PaddingMode padding)
{
using (var encryptor = rsa.CreateEncryptor(rsa.ExportParameters(false).Key, padding))
{
using (var memoryStream = new MemoryStream())
{
using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
{
cryptoStream.Write(data, 0, data.Length);
}
return memoryStream.ToArray();
}
}
}
// 解密数据
public static string Decrypt(RSACryptoServiceProvider rsa, byte[] cipherData)
{
byte[] decryptedBytes = rsa.Decrypt(cipherData, true);
return Encoding.UTF8.GetString(decryptedBytes);
}
}
```
在这个例子中,我们首先创建一个RSA密钥对,然后用公钥加密明文,再用私钥解密。注意使用了`Pkcs1`填充模式,这是RSA的标准填充方案之一。
相关问题:
1. C#中如何生成RSA密钥对?
2. `ToXmlString`方法的作用是什么?
3. PKCS1模式下为什么要进行填充?
4. 如何在C#中指定不同的加密模式,比如CBC?
阅读全文