C# 语言 加密解密算法应用

C#阿木 发布于 2025-06-13 6 次阅读


C 语言中的加密解密算法应用

在当今信息时代,数据安全变得尤为重要。加密解密算法是保障数据安全的关键技术之一。C 作为一种广泛应用于企业级应用开发的语言,提供了丰富的加密解密库,使得开发者可以轻松实现数据的加密和解密。本文将围绕C语言中的加密解密算法应用,探讨几种常见的加密解密方法,并给出相应的代码示例。

1. 常见加密解密算法

在C中,常见的加密解密算法包括:

- 对称加密算法:如AES、DES、3DES等。
- 非对称加密算法:如RSA、ECC等。
- 消息摘要算法:如MD5、SHA1、SHA256等。

2. 对称加密算法

对称加密算法使用相同的密钥进行加密和解密。以下以AES算法为例,介绍如何在C中实现数据的加密和解密。

2.1 AES加密

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

public class AesEncryption
{
public static string Encrypt(string plainText, string key)
{
byte[] keyBytes = Encoding.UTF8.GetBytes(key);
byte[] ivBytes = Encoding.UTF8.GetBytes("1234567890123456");

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 Convert.ToBase64String(msEncrypt.ToArray());
}
}
}
}

public static string Decrypt(string cipherText, string key)
{
byte[] keyBytes = Encoding.UTF8.GetBytes(key);
byte[] ivBytes = Encoding.UTF8.GetBytes("1234567890123456");

using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = keyBytes;
aesAlg.IV = ivBytes;

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

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

class Program
{
static void Main()
{
string plainText = "Hello, World!";
string key = "1234567890123456";

string cipherText = AesEncryption.Encrypt(plainText, key);
Console.WriteLine("Cipher Text: " + cipherText);

string decryptedText = AesEncryption.Decrypt(cipherText, key);
Console.WriteLine("Decrypted Text: " + decryptedText);
}
}

2.2 DES加密

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

public class DesEncryption
{
public static string Encrypt(string plainText, string key)
{
byte[] keyBytes = Encoding.UTF8.GetBytes(key);
byte[] ivBytes = Encoding.UTF8.GetBytes("12345678");

using (DESCryptoServiceProvider desAlg = new DESCryptoServiceProvider())
{
desAlg.Key = keyBytes;
desAlg.IV = ivBytes;

ICryptoTransform encryptor = desAlg.CreateEncryptor(desAlg.Key, desAlg.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 Convert.ToBase64String(msEncrypt.ToArray());
}
}
}
}

public static string Decrypt(string cipherText, string key)
{
byte[] keyBytes = Encoding.UTF8.GetBytes(key);
byte[] ivBytes = Encoding.UTF8.GetBytes("12345678");

using (DESCryptoServiceProvider desAlg = new DESCryptoServiceProvider())
{
desAlg.Key = keyBytes;
desAlg.IV = ivBytes;

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

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

3. 非对称加密算法

非对称加密算法使用一对密钥,即公钥和私钥。以下以RSA算法为例,介绍如何在C中实现数据的加密和解密。

3.1 RSA加密

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

public class RsaEncryption
{
public static string Encrypt(string plainText, string publicKey)
{
byte[] data = Encoding.UTF8.GetBytes(plainText);
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.FromXmlString(publicKey);
byte[] encryptedData = rsa.Encrypt(data, true);
return Convert.ToBase64String(encryptedData);
}
}

public static string Decrypt(string cipherText, string privateKey)
{
byte[] data = Convert.FromBase64String(cipherText);
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.FromXmlString(privateKey);
byte[] decryptedData = rsa.Decrypt(data, true);
return Encoding.UTF8.GetString(decryptedData);
}
}
}

4. 消息摘要算法

消息摘要算法用于生成数据的摘要,以验证数据的完整性和一致性。以下以SHA256算法为例,介绍如何在C中实现数据的摘要。

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

public class Hashing
{
public static string GetHash(string input)
{
using (SHA256 sha256 = SHA256.Create())
{
byte[] bytes = Encoding.UTF8.GetBytes(input);
byte[] hash = sha256.ComputeHash(bytes);
StringBuilder builder = new StringBuilder();
for (int i = 0; i < hash.Length; i++)
{
builder.Append(hash[i].ToString("x2"));
}
return builder.ToString();
}
}
}

5. 总结

本文介绍了C语言中常见的加密解密算法,包括对称加密算法、非对称加密算法和消息摘要算法。通过示例代码,展示了如何在C中实现数据的加密和解密。在实际应用中,开发者应根据具体需求选择合适的加密解密算法,并确保密钥的安全管理。