asp.net

asp.net aes加密填充方式

小樊
81
2024-12-04 23:55:21
栏目: 编程语言

在ASP.NET中,使用AES加密时,可以选择不同的填充方式。常见的填充方式有PKCS7、ISO10126和NoPadding。下面是一个使用AES加密和解密的示例,展示了如何使用不同的填充方式。

首先,确保已经安装了System.Security.Cryptography命名空间。

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

接下来,我们创建一个加密和解密的方法,分别使用PKCS7、ISO10126和NoPadding填充方式。

public static string Encrypt(string plainText, string key, string iv, PaddingMode paddingMode)
{
    using (Aes aes = Aes.Create())
    {
        aes.Key = Encoding.UTF8.GetBytes(key);
        aes.IV = Encoding.UTF8.GetBytes(iv);
        aes.Mode = CipherMode.CBC;
        aes.Padding = paddingMode;

        ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);

        byte[] plainBytes = Encoding.UTF8.GetBytes(plainText);
        byte[] encryptedBytes = encryptor.TransformFinalBlock(plainBytes, 0, plainBytes.Length);

        return Convert.ToBase64String(encryptedBytes);
    }
}

public static string Decrypt(string cipherText, string key, string iv, PaddingMode paddingMode)
{
    using (Aes aes = Aes.Create())
    {
        aes.Key = Encoding.UTF8.GetBytes(key);
        aes.IV = Encoding.UTF8.GetBytes(iv);
        aes.Mode = CipherMode.CBC;
        aes.Padding = paddingMode;

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

        byte[] encryptedBytes = Convert.FromBase64String(cipherText);
        byte[] decryptedBytes = decryptor.TransformFinalBlock(encryptedBytes, 0, encryptedBytes.Length);

        return Encoding.UTF8.GetString(decryptedBytes);
    }
}

现在,我们可以使用这些方法来加密和解密字符串。

string plainText = "Hello, World!";
string key = "abcdefghijklmnop";
string iv = "1234567890abcdef";

// 使用PKCS7填充方式加密
string encryptedTextPkcs7 = Encrypt(plainText, key, iv, PaddingMode.PKCS7);
Console.WriteLine("Encrypted text (PKCS7): " + encryptedTextPkcs7);

// 使用ISO10126填充方式加密
string encryptedTextIso10126 = Encrypt(plainText, key, iv, PaddingMode.ISO10126);
Console.WriteLine("Encrypted text (ISO10126): " + encryptedTextIso10126);

// 使用NoPadding填充方式加密
string encryptedTextNoPadding = Encrypt(plainText, key, iv, PaddingMode.NoPadding);
Console.WriteLine("Encrypted text (NoPadding): " + encryptedTextNoPadding);

// 使用PKCS7填充方式解密
string decryptedTextPkcs7 = Decrypt(encryptedTextPkcs7, key, iv, PaddingMode.PKCS7);
Console.WriteLine("Decrypted text (PKCS7): " + decryptedTextPkcs7);

// 使用ISO10126填充方式解密
string decryptedTextIso10126 = Decrypt(encryptedTextIso10126, key, iv, PaddingMode.ISO10126);
Console.WriteLine("Decrypted text (ISO10126): " + decryptedTextIso10126);

// 使用NoPadding填充方式解密
string decryptedTextNoPadding = Decrypt(encryptedTextNoPadding, key, iv, PaddingMode.NoPadding);
Console.WriteLine("Decrypted text (NoPadding): " + decryptedTextNoPadding);

请注意,加密和解密时使用的密钥(key)和初始化向量(iv)应该是相同的。在实际应用中,请确保妥善保管这些密钥和向量。

0
看了该问题的人还看了