91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

C#對稱加密加密后如何驗證數據完整性

c#
小樊
82
2024-07-15 10:38:41
欄目: 編程語言

在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 算法計算加密后數據的消息認證碼。最后,驗證加密后數據的完整性,通過比較計算出的消息認證碼與原始消息認證碼是否相等來確定數據是否被篡改。

請注意,為了簡化示例,未處理異常處理和其他一些細節。在實際應用中,請根據需要進行適當的錯誤處理和安全措施。

0
柯坪县| 盐亭县| 德保县| 博爱县| 泸溪县| 康马县| 托里县| 连南| 年辖:市辖区| 罗山县| 嘉兴市| 武山县| 衡阳市| 莫力| 绥滨县| 忻城县| 白山市| 永州市| 江孜县| 镇巴县| 连南| 通海县| 炉霍县| 雅安市| 城口县| 霍山县| 兴城市| 财经| 白朗县| 长沙县| 如皋市| 沙田区| 江北区| 黄石市| 塔城市| 徐州市| 若尔盖县| 沂源县| 晋宁县| 庐江县| 株洲县|