C#代码实现非对称加密
时间: 2023-10-19 21:00:57 浏览: 45
非对称加密(Asymmetric Encryption)是指加密和解密使用不同的密钥,其中一个密钥被称为公钥,另一个被称为私钥。C# 中可以使用 System.Security.Cryptography 命名空间中的 RSACryptoServiceProvider 类来实现非对称加密。以下是一个简单的示例:
```csharp
using System;
using System.Security.Cryptography;
using System.Text;
class Program {
static void Main(string[] args) {
string publicKey, privateKey;
GenerateKey(out publicKey, out privateKey);
string text = "Hello, world!";
byte[] encryptedData = Encrypt(Encoding.UTF8.GetBytes(text), publicKey);
byte[] decryptedData = Decrypt(encryptedData, privateKey);
string decryptedText = Encoding.UTF8.GetString(decryptedData);
Console.WriteLine("Original text: {0}", text);
Console.WriteLine("Encrypted data: {0}", Convert.ToBase64String(encryptedData));
Console.WriteLine("Decrypted text: {0}", decryptedText);
}
static void GenerateKey(out string publicKey, out string privateKey) {
using (var rsa = new RSACryptoServiceProvider()) {
publicKey = rsa.ToXmlString(false);
privateKey = rsa.ToXmlString(true);
}
}
static byte[] Encrypt(byte[] data, string publicKey) {
using (var rsa = new RSACryptoServiceProvider()) {
rsa.FromXmlString(publicKey);
return rsa.Encrypt(data, false);
}
}
static byte[] Decrypt(byte[] data, string privateKey) {
using (var rsa = new RSACryptoServiceProvider()) {
rsa.FromXmlString(privateKey);
return rsa.Decrypt(data, false);
}
}
}
```
上面的代码中,首先调用 `GenerateKey` 方法生成公钥和私钥,然后使用公钥加密数据,使用私钥解密数据。`Encrypt` 方法接受一个 `byte[]` 类型的数据和一个公钥字符串,返回加密后的数据。`Decrypt` 方法接受加密后的数据和一个私钥字符串,返回解密后的数据。最后输出原始文本、加密后的数据和解密后的文本。