在C#中,可以使用對稱加密算法(如AES)對數據進行加密,然后使用消息認證碼(MAC)算法(如HMAC)對加密后的數據進行簽名(生成摘要),以確保數據的完整性和驗證數據的真實性。
以下是一種實現方式:
using System;
using System.Security.Cryptography;
class Program
{
static void Main()
{
// 原始數據
string originalData = "Hello World!";
// 對稱加密密鑰
byte[] key = GenerateRandomKey();
// 加密數據
byte[] encryptedData = EncryptData(originalData, key);
// 計算消息認證碼
byte[] mac = GenerateMAC(encryptedData, key);
// 驗證數據完整性
bool isValid = VerifyMAC(encryptedData, mac, key);
Console.WriteLine("MAC is valid: " + isValid);
}
static byte[] GenerateRandomKey()
{
using (Aes aes = Aes.Create())
{
aes.GenerateKey();
return aes.Key;
}
}
static byte[] EncryptData(string data, byte[] key)
{
using (Aes aes = Aes.Create())
{
aes.Key = key;
aes.GenerateIV();
byte[] encryptedData;
using (ICryptoTransform encryptor = aes.CreateEncryptor())
{
encryptedData = encryptor.TransformFinalBlock(
System.Text.Encoding.UTF8.GetBytes(data), 0, data.Length);
}
return encryptedData;
}
}
static byte[] GenerateMAC(byte[] data, byte[] key)
{
using (HMACSHA256 hmac = new HMACSHA256(key))
{
return hmac.ComputeHash(data);
}
}
static bool VerifyMAC(byte[] data, byte[] mac, byte[] key)
{
byte[] calculatedMAC = GenerateMAC(data, key);
return StructuralComparisons.StructuralEqualityComparer.Equals(calculatedMAC, mac);
}
}
在這個示例中,首先生成一個隨機的對稱加密密鑰,然后使用該密鑰對原始數據進行對稱加密。接下來,使用 HMACSHA256 算法計算加密后數據的消息認證碼。最后,驗證加密后數據的完整性,通過比較計算出的消息認證碼與原始消息認證碼是否相等來確定數據是否被篡改。
請注意,為了簡化示例,未處理異常處理和其他一些細節。在實際應用中,請根據需要進行適當的錯誤處理和安全措施。