AES加密

暖暖De幸福發表於2024-03-21

AES 演算法加密(ECB模式),加密後進行base64編碼

異常

Specified key is not a valid size for this algorithm

解決方法:AES加密中引數key應是32位,如果位數不對會報此錯。

/// <summary>
/// AES 演算法加密(ECB模式) 將明文加密,加密後進行base64編碼,返回密文
/// </summary>
/// <param name="EncryptStr">明文</param>
/// <param name="Key">金鑰</param>
/// <returns>加密後base64編碼的密文</returns>
public static string AesEncryptor_Base64(string EncryptStr, string Key)
{
    try
    {
        //byte[] keyArray = Encoding.UTF8.GetBytes(Key);
        byte[] keyArray = Convert.FromBase64String(Key);
        byte[] toEncryptArray = Encoding.UTF8.GetBytes(EncryptStr);

        RijndaelManaged rDel = new RijndaelManaged();
        rDel.Key = keyArray;
        rDel.Mode = CipherMode.ECB;
        rDel.Padding = PaddingMode.PKCS7;

        ICryptoTransform cTransform = rDel.CreateEncryptor();
        byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

        return Convert.ToBase64String(resultArray, 0, resultArray.Length);
    }
    catch (Exception ex)
    {
        return null;
    }
}

/// <summary>
/// AES 演算法解密(ECB模式) 將密文base64解碼進行解密,返回明文
/// </summary>
/// <param name="DecryptStr">密文</param>
/// <param name="Key">金鑰</param>
/// <returns>明文</returns>
public static string AesDecryptor_Base64(string DecryptStr, string Key)
{
    try
    {
        //byte[] keyArray = Encoding.UTF8.GetBytes(Key);
        byte[] keyArray = Convert.FromBase64String(Key);
        byte[] toEncryptArray = Convert.FromBase64String(DecryptStr);

        RijndaelManaged rDel = new RijndaelManaged();
        rDel.Key = keyArray;
        rDel.Mode = CipherMode.ECB;
        rDel.Padding = PaddingMode.PKCS7;

        ICryptoTransform cTransform = rDel.CreateDecryptor();
        byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

        return Encoding.UTF8.GetString(resultArray);//  UTF8Encoding.UTF8.GetString(resultArray);
    }
    catch (Exception ex)
    {
        return null;
    }
}

相關文章