C#实现加密与解密详解
在C#开发中,我们常常需要对某些敏感数据进行加密处理,以保证数据的安全性。本文将详细讲解C#实现加密与解密的方法,包括对称加密、非对称加密和哈希算法的讲解,并提供示例代码演示。
对称加密
对称加密是指使用相同的密钥进行加密和解密的加密方式。常见的对称加密算法有DES、AES等。下面是使用AES加密的示例代码:
using System;
using System.IO;
using System.Security.Cryptography;
public static class AesHelper
{
public static byte[] Encrypt(string plainText, byte[] key, byte[] iv)
{
byte[] encrypted;
using (Aes aes = Aes.Create())
{
aes.Key = key;
aes.IV = iv;
ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter sw = new StreamWriter(cs))
{
sw.Write(plainText);
}
encrypted = ms.ToArray();
}
}
}
return encrypted;
}
public static string Decrypt(byte[] cipherText, byte[] key, byte[] iv)
{
string plaintext = null;
using (Aes aes = Aes.Create())
{
aes.Key = key;
aes.IV = iv;
ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
using (MemoryStream ms = new MemoryStream(cipherText))
{
using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
{
using (StreamReader reader = new StreamReader(cs))
{
plaintext = reader.ReadToEnd();
}
}
}
}
return plaintext;
}
}
以上代码中的 Encrypt
方法接收一个明文字符串、一个密钥和一个初始化向量(IV),并返回加密后的字节数组。Decrypt
方法接收一个密文字节数组、一个密钥和一个初始化向量,并返回解密后的明文字符串。
下面是使用上述示例代码对字符串进行加密和解密的示例:
string plainText = "Hello, world!";
byte[] key = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
byte[] iv = new byte[] { 17, 18, 19, 20, 21, 22, 23, 24 };
byte[] encrypted = AesHelper.Encrypt(plainText, key, iv);
string decrypted = AesHelper.Decrypt(encrypted, key, iv);
Console.WriteLine("Plain text: {0}", plainText);
Console.WriteLine("Encrypted text: {0}", Convert.ToBase64String(encrypted));
Console.WriteLine("Decrypted text: {0}", decrypted);
非对称加密
非对称加密是指使用公钥加密、私钥解密或使用私钥签名、公钥验证的加密方式。常见的非对称加密算法有RSA、ECC等。下面是一个使用RSA加密和解密的示例代码:
using System;
using System.Security.Cryptography;
public static class RsaHelper
{
public static byte[] Encrypt(byte[] data, RSAParameters publicKey)
{
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.ImportParameters(publicKey);
return rsa.Encrypt(data, true);
}
}
public static byte[] Decrypt(byte[] data, RSAParameters privateKey)
{
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.ImportParameters(privateKey);
return rsa.Decrypt(data, true);
}
}
}
以上示例代码中的 Encrypt
方法接收一个字节数组和一个公钥参数,返回加密后的字节数组。Decrypt
方法接收一个字节数组和一个私钥参数,并返回解密后的字节数组。
下面是使用上述示例代码对字符串进行加密和解密的示例:
string plainText = "Hello, world!";
byte[] data = System.Text.Encoding.UTF8.GetBytes(plainText);
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
byte[] encrypted = RsaHelper.Encrypt(data, rsa.ExportParameters(false));
byte[] decrypted = RsaHelper.Decrypt(encrypted, rsa.ExportParameters(true));
Console.WriteLine("Plain text: {0}", plainText);
Console.WriteLine("Encrypted text: {0}", Convert.ToBase64String(encrypted));
Console.WriteLine("Decrypted text: {0}", System.Text.Encoding.UTF8.GetString(decrypted));
}
哈希算法
哈希算法是一种将任意长度的消息压缩到固定长度的消息摘要的算法。哈希算法的特点是不可逆,相同的输入必定会得到相同的输出。常见的哈希算法有MD5、SHA-1、SHA-256等。下面是使用SHA-256算法计算消息摘要的示例代码:
using System;
using System.Security.Cryptography;
public static class Sha256Helper
{
public static byte[] ComputeHash(byte[] data)
{
using (SHA256 sha256 = SHA256.Create())
{
return sha256.ComputeHash(data);
}
}
}
以上示例代码中的 ComputeHash
方法接收一个字节数组,返回计算出的SHA-256消息摘要的字节数组。下面是使用上述示例代码计算字符串的SHA-256消息摘要的示例:
string plainText = "Hello, world!";
byte[] data = System.Text.Encoding.UTF8.GetBytes(plainText);
byte[] hash = Sha256Helper.ComputeHash(data);
Console.WriteLine("Plain text: {0}", plainText);
Console.WriteLine("Hash: {0}", Convert.ToBase64String(hash));
以上就是本文对C#实现加密与解密的详细讲解和示例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现加密与解密详解 - Python技术站