C# (.NET) 中的密码学:数据加密与哈希

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

C# (.NET) 中的密码学:数据加密与哈希

现代 .NET 平台应用程序几乎总是需要数据保护。System.Security.Cryptography 库提供了完整的工具集来实现密码学操作:从对称和非对称加密到哈希生成和数字签名。本文将介绍 C# 中可用的主要算法,并展示它们的使用示例。



1. .NET 中的主要密码学类

所有密码学类都位于 System.Security.Cryptography 命名空间中。主要类别包括:

  • 对称加密 — 使用一个密钥进行加密和解密(Aes, DES, TripleDES)。
  • 非对称加密 — 使用一对密钥:公钥和私钥(RSA, ECDiffieHellman)。
  • 哈希 — 数据的单向转换(SHA256, SHA512, MD5)。
  • 随机数生成 — 密码学安全的随机数生成器(RandomNumberGenerator)。


2. 以 AES 为例的对称加密

AES(高级加密标准)算法是最常用的对称密码。在 .NET 中使用 Aes 类来实现。

字符串加密和解密示例:

using System;using System.IO;using System.Security.Cryptography;using System.Text;

public class AesExample{ public static byte[] EncryptStringToBytes_Aes(string plainText, byte[] key, byte[] iv) { using (Aes aesAlg = Aes.Create()) { aesAlg.Key = key; aesAlg.IV = iv;

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 DecryptStringFromBytes_Aes(byte[] cipherText, byte[] key, byte[] iv) { using (Aes aesAlg = Aes.Create()) { aesAlg.Key = key; aesAlg.IV = iv;

ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);

using (MemoryStream msDecrypt = new MemoryStream(cipherText)) { using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) { using (StreamReader srDecrypt = new StreamReader(csDecrypt)) { return srDecrypt.ReadToEnd(); } } } } }}

使用方法:

byte[] key = RandomNumberGenerator.GetBytes(32); // 256位密钥byte[] iv = RandomNumberGenerator.GetBytes(16);  // 128位IV

string original = "机密数据";byte[] encrypted = AesExample.EncryptStringToBytes_Aes(original, key, iv);string decrypted = AesExample.DecryptStringFromBytes_Aes(encrypted, key, iv);

Console.WriteLine($"原文: {original}");Console.WriteLine($"解密后: {decrypted}");


3. 使用 RSA 的非对称加密

RSA 用于安全传输密钥或小量数据。在 .NET 中通过 RSA 类实现。

密钥生成和加密示例:

using System;using System.Security.Cryptography;using System.Text;

public class RsaExample{ public static void Demonstrate

推荐