引言在当今数字化时代,数据安全显得尤为重要。C作为一种流行的编程语言,提供了多种加密和解密方法来保护数据。本文将深入探讨C中的加密与解密技术,帮助读者轻松掌握高效的数据保护技巧。1. 加密与解密的基本...
在当今数字化时代,数据安全显得尤为重要。C#作为一种流行的编程语言,提供了多种加密和解密方法来保护数据。本文将深入探讨C#中的加密与解密技术,帮助读者轻松掌握高效的数据保护技巧。
加密是将原始数据(明文)转换为不可读形式(密文)的过程,目的是保护数据在传输或存储过程中的安全。加密算法分为对称加密和非对称加密两种。
解密是将密文恢复为原始数据的过程,通常需要使用与加密相同的算法和密钥。
对称加密使用相同的密钥进行加密和解密。以下是在C#中使用对称加密的几种常见方法:
AES(高级加密标准)是一种广泛使用的对称加密算法。以下是一个使用AES进行加密和解密的示例:
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
public class AesEncryption
{ public static void Main() { string plainText = "Hello, World!"; string key = "your-256-bit-key"; string iv = "your-256-bit-iv"; byte[] encrypted = Encrypt(plainText, key, iv); string decrypted = Decrypt(encrypted, key, iv); Console.WriteLine("Original: " + plainText); Console.WriteLine("Encrypted: " + Convert.ToBase64String(encrypted)); Console.WriteLine("Decrypted: " + decrypted); } public static byte[] Encrypt(string plainText, string key, string iv) { byte[] keyBytes = Encoding.UTF8.GetBytes(key); byte[] ivBytes = Encoding.UTF8.GetBytes(iv); using (Aes aesAlg = Aes.Create()) { aesAlg.Key = keyBytes; aesAlg.IV = ivBytes; ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV); using (MemoryStream msEncrypt = new MemoryStream()) { using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) { using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) { swEncrypt.Write(plainText); } return msEncrypt.ToArray(); } } } } public static string Decrypt(byte[] encrypted, string key, string iv) { byte[] keyBytes = Encoding.UTF8.GetBytes(key); byte[] ivBytes = Encoding.UTF8.GetBytes(iv); using (Aes aesAlg = Aes.Create()) { aesAlg.Key = keyBytes; aesAlg.IV = ivBytes; ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV); using (MemoryStream msDecrypt = new MemoryStream(encrypted)) { using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) { using (StreamReader srDecrypt = new StreamReader(csDecrypt)) { return srDecrypt.ReadToEnd(); } } } } }
}Rijndael加密算法是AES的前身,同样适用于对称加密。以下是一个使用Rijndael进行加密和解密的示例:
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
public class RijndaelEncryption
{ public static void Main() { string plainText = "Hello, World!"; string key = "your-256-bit-key"; string iv = "your-256-bit-iv"; byte[] encrypted = Encrypt(plainText, key, iv); string decrypted = Decrypt(encrypted, key, iv); Console.WriteLine("Original: " + plainText); Console.WriteLine("Encrypted: " + Convert.ToBase64String(encrypted)); Console.WriteLine("Decrypted: " + decrypted); } public static byte[] Encrypt(string plainText, string key, string iv) { byte[] keyBytes = Encoding.UTF8.GetBytes(key); byte[] ivBytes = Encoding.UTF8.GetBytes(iv); using (RijndaelManaged aesAlg = new RijndaelManaged()) { aesAlg.Key = keyBytes; aesAlg.IV = ivBytes; ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV); using (MemoryStream msEncrypt = new MemoryStream()) { using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) { using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) { swEncrypt.Write(plainText); } return msEncrypt.ToArray(); } } } } public static string Decrypt(byte[] encrypted, string key, string iv) { byte[] keyBytes = Encoding.UTF8.GetBytes(key); byte[] ivBytes = Encoding.UTF8.GetBytes(iv); using (RijndaelManaged aesAlg = new RijndaelManaged()) { aesAlg.Key = keyBytes; aesAlg.IV = ivBytes; ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV); using (MemoryStream msDecrypt = new MemoryStream(encrypted)) { using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) { using (StreamReader srDecrypt = new StreamReader(csDecrypt)) { return srDecrypt.ReadToEnd(); } } } } }
}非对称加密使用一对密钥,一个用于加密(公钥),另一个用于解密(私钥)。以下是在C#中使用非对称加密的几种常见方法:
RSA是一种广泛使用的非对称加密算法。以下是一个使用RSA进行加密和解密的示例:
using System;
using System.Security.Cryptography;
using System.Text;
public class RsaEncryption
{ public static void Main() { string plainText = "Hello, World!"; byte[] publicKey = Convert.FromBase64String("your-public-key-here"); byte[] privateKey = Convert.FromBase64String("your-private-key-here"); byte[] encrypted = Encrypt(plainText, publicKey); string decrypted = Decrypt(encrypted, privateKey); Console.WriteLine("Original: " + plainText); Console.WriteLine("Encrypted: " + Convert.ToBase64String(encrypted)); Console.WriteLine("Decrypted: " + decrypted); } public static byte[] Encrypt(string plainText, byte[] publicKey) { using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) { rsa.FromXmlString(Convert.ToBase64String(publicKey)); return rsa.Encrypt(Encoding.UTF8.GetBytes(plainText), true); } } public static string Decrypt(byte[] encrypted, byte[] privateKey) { using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) { rsa.FromXmlString(Convert.ToBase64String(privateKey)); return Encoding.UTF8.GetString(rsa.Decrypt(encrypted, true)); } }
}ECDiffieHellman是一种基于椭圆曲线的密钥交换算法。以下是一个使用ECDiffieHellman进行密钥交换的示例:
using System;
using System.Security.Cryptography;
using System.Text;
public class ECDiffieHellman
{ public static void Main() { ECDiffieHellmanPublicKey publicKeyA = new ECDiffieHellmanPublicKey(); ECDiffieHellmanPublicKey publicKeyB = new ECDiffieHellmanPublicKey(); // 生成公钥 publicKeyA.GenerateKey(); publicKeyB.GenerateKey(); // 交换公钥 byte[] keyA = publicKeyA.ToXmlString(false); byte[] keyB = publicKeyB.ToXmlString(false); // 生成密钥 ECDiffieHellman ecdhA = new ECDiffieHellman(); ecdhA.FromXmlString(keyA, false); ECDiffieHellman ecdhB = new ECDiffieHellman(); ecdhB.FromXmlString(keyB, false); byte[] sharedSecret = ecdhA.DeriveKeyMaterial(keyB); Console.WriteLine("Shared Secret: " + Convert.ToBase64String(sharedSecret)); }
}C#提供了多种加密和解密方法,包括对称加密(AES、Rijndael)和非对称加密(RSA、ECDiffieHellman)。掌握这些加密技术对于保护数据安全至关重要。本文介绍了C#中的加密与解密技巧,并通过示例代码展示了如何使用这些技术。希望本文能帮助读者轻松掌握高效的数据保护方法。