下面是关于C#实现简单的RSA非对称加密算法的攻略:
什么是RSA加密算法?
RSA加密算法采用了一种被称为"公钥加密算法"的加密方式,加密和解密使用不同的密钥。公钥可以公开,任何人都可以获得,私钥则只有一个人可以拥有。采用这种方式,可以保证信息传输的安全性。
在C#中实现RSA加密算法
C#提供了RSACryptoServiceProvider类,可以用来实现RSA加密算法。下面是一个简单的C#代码示例,演示了如何使用RSACryptoServiceProvider类对一段数据进行加密和解密:
using System;
using System.Security.Cryptography;
class Program
{
static void Main()
{
string data = "hello world";
byte[] plainData = System.Text.Encoding.Default.GetBytes(data);
// 生成密钥对
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(2048);
// 加密
byte[] encryptedData = rsa.Encrypt(plainData, false);
// 解密
byte[] decryptedData = rsa.Decrypt(encryptedData, false);
string decryptedString = System.Text.Encoding.Default.GetString(decryptedData);
Console.WriteLine(decryptedString);
}
}
以上代码的输出结果为"hello world",说明加密和解密成功。
示例1:加密/解密字符串
下面是一个更详细的示例代码,演示如何使用RSA加密算法对一段字符串进行加密和解密:
using System;
using System.Security.Cryptography;
class Program
{
static byte[] publicKey;
static byte[] privateKey;
static void Main()
{
string data = "hello world";
byte[] plainData = System.Text.Encoding.Default.GetBytes(data);
// 生成密钥对
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(2048))
{
publicKey = rsa.ExportCspBlob(false);
privateKey = rsa.ExportCspBlob(true);
}
// 加密
byte[] encryptedData = Encrypt(plainData, publicKey);
// 解密
byte[] decryptedData = Decrypt(encryptedData, privateKey);
string decryptedString = System.Text.Encoding.Default.GetString(decryptedData);
Console.WriteLine(decryptedString);
}
static byte[] Encrypt(byte[] data, byte[] publicKey)
{
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.ImportCspBlob(publicKey);
return rsa.Encrypt(data, false);
}
}
static byte[] Decrypt(byte[] data, byte[] privateKey)
{
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.ImportCspBlob(privateKey);
return rsa.Decrypt(data, false);
}
}
}
以上代码将对字符串"hello world"进行加密和解密,输出的结果仍然是"hello world"。在这个例子中,我们使用了ExportCspBlob方法导出公钥和私钥,并通过ImportCspBlob方法导入密钥。
示例2:保存和恢复密钥
在实际应用中,我们通常需要将公钥和私钥保存在文件或数据库中,并在需要时恢复密钥。下面是一个示例代码,演示如何保存和恢复RSA密钥:
using System;
using System.Security.Cryptography;
class Program
{
static void Main()
{
string data = "hello world";
byte[] plainData = System.Text.Encoding.Default.GetBytes(data);
// 生成密钥对
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(2048);
byte[] publicKey = rsa.ExportCspBlob(false);
byte[] privateKey = rsa.ExportCspBlob(true);
// 保存公钥和私钥
SavePublicKey(publicKey, @"c:\temp\public.key");
SavePrivateKey(privateKey, @"c:\temp\private.key");
// 恢复公钥和私钥
byte[] restoredPublicKey = LoadPublicKey(@"c:\temp\public.key");
byte[] restoredPrivateKey = LoadPrivateKey(@"c:\temp\private.key");
// 加密
byte[] encryptedData = Encrypt(plainData, restoredPublicKey);
// 解密
byte[] decryptedData = Decrypt(encryptedData, restoredPrivateKey);
string decryptedString = System.Text.Encoding.Default.GetString(decryptedData);
Console.WriteLine(decryptedString);
}
static void SavePublicKey(byte[] data, string fileName)
{
System.IO.File.WriteAllBytes(fileName, data);
}
static byte[] LoadPublicKey(string fileName)
{
return System.IO.File.ReadAllBytes(fileName);
}
static void SavePrivateKey(byte[] data, string fileName)
{
System.IO.File.WriteAllBytes(fileName, data);
}
static byte[] LoadPrivateKey(string fileName)
{
return System.IO.File.ReadAllBytes(fileName);
}
static byte[] Encrypt(byte[] data, byte[] publicKey)
{
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.ImportCspBlob(publicKey);
return rsa.Encrypt(data, false);
}
}
static byte[] Decrypt(byte[] data, byte[] privateKey)
{
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.ImportCspBlob(privateKey);
return rsa.Decrypt(data, false);
}
}
}
以上代码先将公钥和私钥保存到文件中,然后又从文件中恢复密钥,并进行加密和解密。请注意,这里使用了File.WriteAllBytes和File.ReadAllBytes方法来保存和读取密钥文件。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现简单的RSA非对称加密算法示例 - Python技术站