首页主机资讯C#对称加密加密后如何验证数据完整性

C#对称加密加密后如何验证数据完整性

时间2024-07-15 20:08:03发布访客分类主机资讯浏览411
导读:在C#中,可以使用对称加密算法(如AES)对数据进行加密,然后使用消息认证码(MAC)算法(如HMAC)对加密后的数据进行签名(生成摘要),以确保数据的完整性和验证数据的真实性。 以下是一种实现方式: using System; using...

在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 算法计算加密后数据的消息认证码。最后,验证加密后数据的完整性,通过比较计算出的消息认证码与原始消息认证码是否相等来确定数据是否被篡改。

请注意,为了简化示例,未处理异常处理和其他一些细节。在实际应用中,请根据需要进行适当的错误处理和安全措施。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: C#对称加密加密后如何验证数据完整性
本文地址: https://pptw.com/jishu/688506.html
C#对称加密可以保证数据的哪些安全特性 C#对称加密在网络传输中如何应用

游客 回复需填写必要信息