C# 五大加密算法全套实战(AES/DES对称、RSA非对称、MD5/SHA256哈希)

发布时间:2026/7/15 5:53:12

C# 五大加密算法全套实战(AES/DES对称、RSA非对称、MD5/SHA256哈希) 一、加密算法整体分类必考面试核心算法类型代表算法特点可逆性场景对称加密AES、DES加密解密同一密钥、速度快、适合大文件非对称加密RSA公钥加密、私钥解密、安全性高、速度慢可逆密码校验、签名、密钥分发哈希摘要MD5、SHA256定长输出、雪崩效应、无密钥不可逆密码存储、文件完整性校验二、对称加密算法1. AES 高级加密标准主流、推荐原理简述AES 是分组对称加密算法采用 128/192/256 位密钥需要Key密钥 IV初始向量。IV 作用相同明文相同密钥不同IV生成不同密文防止加密结果固定被破解。AES 完整工具类using System; using System.Configuration; using System.IO; using System.Security.Cryptography; using System.Text; /// summary /// AES 对称加密可逆、推荐商用 /// /summary public class AESHelper { // 从配置文件读取密钥和向量 private static readonly string keyString ConfigurationManager.AppSettings[AESKEY]; private static readonly string ivString ConfigurationManager.AppSettings[AESIV]; private static readonly byte[] key Encoding.UTF8.GetBytes(keyString); private static readonly byte[] iv Encoding.UTF8.GetBytes(ivString); /// summary /// AES 加密 /// /summary public static string Encrypt(string data) { 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(data); } } // 转Base64字符串输出 return Convert.ToBase64String(ms.ToArray()); } } } /// summary /// AES 解密 /// /summary public static string Decrypt(string data) { byte[] buffer Convert.FromBase64String(data); using (Aes aes Aes.Create()) { aes.Key key; aes.IV iv; ICryptoTransform decryptor aes.CreateDecryptor(aes.Key, aes.IV); using (MemoryStream ms new MemoryStream(buffer)) { using (CryptoStream cs new CryptoStream(ms, decryptor, CryptoStreamMode.Read)) { using (StreamReader sr new StreamReader(cs)) { return sr.ReadToEnd(); } } } } } }2. DES 数据加密标准老旧、不推荐原理简述DES 采用64位密钥有效56位安全性低、现已淘汰仅用于老旧系统兼容。DES 完整工具类using System; using System.Configuration; using System.IO; using System.Security.Cryptography; using System.Text; /// summary /// DES 对称加密老旧算法、安全性弱 /// /summary public class DESHelper { private static readonly string keyString ConfigurationManager.AppSettings[DESKEY]; private static readonly byte[] Key Encoding.UTF8.GetBytes(keyString); private static readonly byte[] IV Encoding.UTF8.GetBytes(keyString); /// summary /// DES 加密 /// /summary public static string Encrypt(string data) { using (DESCryptoServiceProvider des new DESCryptoServiceProvider()) { MemoryStream ms new MemoryStream(); CryptoStream cs new CryptoStream(ms, des.CreateEncryptor(Key, IV), CryptoStreamMode.Write); byte[] dataBytes Encoding.UTF8.GetBytes(data); cs.Write(dataBytes, 0, dataBytes.Length); cs.FlushFinalBlock(); return Convert.ToBase64String(ms.ToArray()); } } /// summary /// DES 解密 /// /summary public static string Decrypt(string data) { byte[] buffer Convert.FromBase64String(data); using (DESCryptoServiceProvider des new DESCryptoServiceProvider()) { MemoryStream ms new MemoryStream(); CryptoStream cs new CryptoStream(ms, des.CreateDecryptor(Key, IV), CryptoStreamMode.Write); cs.Write(buffer, 0, buffer.Length); cs.FlushFinalBlock(); return Encoding.UTF8.GetString(ms.ToArray()); } } }三、非对称加密 RSA原理简述公钥Public公开分发用于加密私钥Private私密保存用于解密不可逆推导、安全性极高、适合核心机密数据RSA 完整工具类密钥自动生成加密解密using System; using System.Security.Cryptography; using System.Text; /// summary /// RSA 非对称加密 /// /summary public class RSAHelper { // 公钥、私钥 public static string PublicKey { get; set; } public static string PrivateKey { get; set; } /// summary /// 自动生成 RSA 公钥私钥对 /// /summary public static void GetPairKey() { using (RSACryptoServiceProvider rsa new RSACryptoServiceProvider()) { rsa.PersistKeyInCsp false; PublicKey rsa.ToXmlString(false); // 公钥 PrivateKey rsa.ToXmlString(true); // 私钥 Console.WriteLine(公钥 PublicKey); Console.WriteLine(私钥 PrivateKey); } } /// summary /// 公钥加密 /// /summary public static string Encrypt(string data) { using (RSACryptoServiceProvider rsa new RSACryptoServiceProvider()) { rsa.PersistKeyInCsp false; rsa.FromXmlString(PublicKey); byte[] originBytes Encoding.UTF8.GetBytes(data); byte[] encryptBytes rsa.Encrypt(originBytes, false); return Convert.ToBase64String(encryptBytes); } } /// summary /// 私钥解密 /// /summary public static string Decrypt(string data) { byte[] encryptBytes Convert.FromBase64String(data); using (RSACryptoServiceProvider rsa new RSACryptoServiceProvider()) { rsa.PersistKeyInCsp false; rsa.FromXmlString(PrivateKey); byte[] originBytes rsa.Decrypt(encryptBytes, false); return Encoding.UTF8.GetString(originBytes); } } }四、不可逆哈希摘要算法1. MD5 算法128位定长摘要、不可逆、不安全存在碰撞仅用于老旧项目密码存储、文件校验。using System; using System.Security.Cryptography; using System.Text; /// summary /// MD5 哈希摘要不可逆 /// /summary public class MD5Helper { public static string Encrypt(string data) { using (MD5 md5 MD5.Create()) { byte[] inputBytes Encoding.ASCII.GetBytes(data); byte[] hashBytes md5.ComputeHash(inputBytes); StringBuilder sb new StringBuilder(); foreach (byte b in hashBytes) { sb.Append(b.ToString(X2)); } return sb.ToString(); } } }2. SHA256 算法推荐SHA256 属于 SHA2 系列256位定长、安全性远高于 MD5现代项目优先使用。using System; using System.Security.Cryptography; using System.Text; /// summary /// SHA256 哈希摘要不可逆、高安全 /// /summary public static class SHAHelper { public static string Encrypt(string data) { byte[] inputBytes Encoding.UTF8.GetBytes(data); using (SHA256CryptoServiceProvider sha256 new SHA256CryptoServiceProvider()) { byte[] hashBytes sha256.ComputeHash(inputBytes); StringBuilder sb new StringBuilder(); foreach (byte b in hashBytes) { sb.Append(b.ToString(x2)); } return sb.ToString(); } } }五、WinForm 界面调用代码using System; using System.Windows.Forms; namespace _02加密 { public partial class Form1 : Form { public Form1() { InitializeComponent(); // 程序启动生成RSA密钥对 RSAHelper.GetPairKey(); } // 加密 private void button1_Click(object sender, EventArgs e) { // 按需打开对应算法 //textBox1.Text AESHelper.Encrypt(textBox2.Text); //textBox1.Text DESHelper.Encrypt(textBox2.Text); //textBox1.Text RSAHelper.Encrypt(textBox2.Text); } // 解密 / 摘要计算 private void button2_Click(object sender, EventArgs e) { // 对称、非对称解密 //textBox2.Text AESHelper.Decrypt(textBox1.Text); //textBox2.Text DESHelper.Decrypt(textBox1.Text); //textBox2.Text RSAHelper.Decrypt(textBox1.Text); // 哈希摘要不可逆只有加密没有解密 //textBox2.Text MD5Helper.Encrypt(textBox1.Text); textBox2.Text SHAHelper.Encrypt(textBox1.Text); } } }六、App.config 配置必须配置configuration appSettings !-- AES 密钥、向量16位、24位、32位 -- add keyAESKEY value1234567890123456/ add keyAESIV value1234567890123456/ !-- DES 密钥8位 -- add keyDESKEY value12345678/ /appSettings /configuration七、面试高频总结1. 对称加密AES/DES加密解密同一密钥速度快、适合大量数据AES 安全、DES 老旧淘汰2. 非对称加密RSA公钥加密、私钥解密安全极高、速度慢、适合少量关键数据3. 哈希算法MD5/SHA完全不可逆只能加密、不能解密用于密码存储、文件完整性校验SHA256 安全性 MD5八、终极背诵口诀对称AES速度快同钥加解最自在RSA非对称分开公钥加密私钥开MD5SHA不可逆摘要校验防篡改老旧DES不推荐新项目选新一代。

相关新闻