C# 假设已知公钥证书的地址,如何使用RSA/ECB/PKCS1Padding算法加密字符串,请展示完整示例
时间: 2024-11-27 16:12:46 浏览: 25
在C#中,要使用RSA/ECB/PKCS1Padding算法(电子密码本模式)对字符串进行加密,你需要先获取公钥证书并将其转换为RSA对象。以下是一个完整的示例:
```csharp
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
public class RSACryptoExample
{
public static void Main()
{
// 公钥证书地址
string certificatePath = "path_to_your_certificate.cer"; // 替换为实际路径
try
{
// 加载证书
X509Certificate2 certificate = new X509Certificate2(certificatePath);
// 获取公钥
RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)certificate.PublicKey.Key;
// 待加密的字符串
string plainText = "Hello, World!";
// 使用RSA加密
byte[] encryptedBytes = EncryptString(rsa, Encoding.UTF8.GetBytes(plainText), RSAEncryptionPadding.Pkcs1);
Console.WriteLine("Encrypted String: " + Convert.ToBase64String(encryptedBytes));
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
}
private static byte[] EncryptString(RSACryptoServiceProvider rsa, byte[] data, RSAEncryptionPadding padding)
{
using (var encryptor = rsa.CreateEncryptor(rsa.PublicKey.Key, padding))
{
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
{
cs.Write(data, 0, data.Length);
}
return ms.ToArray();
}
}
}
}
```
在这个示例中,我们首先加载证书,然后从证书中提取公钥。接着定义待加密的字符串`plainText`,并使用`EncryptString`方法将该字符串转换为字节数组,使用RSA/ECB/PKCS1Padding进行加密。最后,我们将加密后的数据输出到控制台。
阅读全文