CSharp 版本的 AES 加解密

直接看代码

/**
 * CSharp 版本的 AES 加解密, 返回加密后 base64 编码的结果/解密后的原文:
 *
 * AES 的 PADDING 为 PKCS7, 对应 JAVA 的 PKCS5Padding,
 * MODE 为 CBC/ECB (CBC 模式需要有 IV, ECB 模式不需要 IV)
 */
public class EncrypTool
{
    public static string AesEncryptCbc_Base64(string EncryptStr, string key, string iv)
    {
        try
        {
            // 这里如果 key 是 base64 编码过的需要先解码一下
            // byte[] keyArray = Convert.FromBase64String(Key);
            byte[] keyArray = Encoding.UTF8.GetBytes(key);
            byte[] ivArray = Encoding.UTF8.GetBytes(iv);
            byte[] toEncryptArray = Encoding.UTF8.GetBytes(EncryptStr);

            RijndaelManaged rDel = new RijndaelManaged();
            rDel.Key = keyArray;
            rDel.IV = ivArray;
            // CBC 模式需要 IV
            rDel.Mode = CipherMode.CBC;
            // 对应 JAVA 的 PKCS5Padding,
            rDel.Padding = PaddingMode.PKCS7;

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

            return Convert.ToBase64String(resultArray, 0, resultArray.Length);
        }
        catch (Exception ex)
        {
            Console.WriteLine("exception: " + ex.Message);
            return "";
        }
    }

    public static string AesDecryptCbc_Base64(string DecryptStr, string key, string iv)
    {
        try
        {
            // 这里如果 key 是 base64 编码过的需要先解码一下
            // byte[] keyArray = Convert.FromBase64String(Key);
            byte[] keyArray = Encoding.UTF8.GetBytes(key);
            byte[] ivArray = Encoding.UTF8.GetBytes(iv);
            // 待解密的字符串是 base64 编码过的
            byte[] toDecryptArray = Convert.FromBase64String(DecryptStr);

            RijndaelManaged rDel = new RijndaelManaged();
            rDel.Key = keyArray;
            rDel.IV = ivArray;
            // CBC 模式需要 IV
            rDel.Mode = CipherMode.CBC;
            // 对应 JAVA 的 PKCS5Padding,
            rDel.Padding = PaddingMode.PKCS7;

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

            return Encoding.UTF8.GetString(resultArray);
        }
        catch (Exception ex)
        {
            Console.WriteLine("exception: " + ex.Message);
            return "";
        }
    }

    public static string AesEncryptEcb_Base64(string EncryptStr, string key)
    {
        try
        {
            // 这里如果 key 是 base64 编码过的需要先解码一下
            // byte[] keyArray = Convert.FromBase64String(Key);
            byte[] keyArray = Encoding.UTF8.GetBytes(key);
            byte[] toEncryptArray = Encoding.UTF8.GetBytes(EncryptStr);

            RijndaelManaged rDel = new RijndaelManaged();
            rDel.Key = keyArray;
            // ECB 模式不需要 IV
            rDel.Mode = CipherMode.ECB;
            // 对应 JAVA 的 PKCS5Padding,
            rDel.Padding = PaddingMode.PKCS7;

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

            return Convert.ToBase64String(resultArray, 0, resultArray.Length);
        }
        catch (Exception ex)
        {
            Console.WriteLine("exception: " + ex.Message);
            return "";
        }
    }

    public static string AesDecryptEcb_Base64(string DecryptStr, string key)
    {
        try
        {
            // 这里如果 key 是 base64 编码过的需要先解码一下
            // byte[] keyArray = Convert.FromBase64String(Key);
            byte[] keyArray = Encoding.UTF8.GetBytes(key);
            // 待解密的字符串是 base64 编码过的
            byte[] toDecryptArray = Convert.FromBase64String(DecryptStr);

            RijndaelManaged rDel = new RijndaelManaged();
            rDel.Key = keyArray;
            // ECB 模式不需要 IV
            rDel.Mode = CipherMode.ECB;
            // 对应 JAVA 的 PKCS5Padding,
            rDel.Padding = PaddingMode.PKCS7;

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

            return Encoding.UTF8.GetString(resultArray);
        }
        catch (Exception ex)
        {
            Console.WriteLine("exception: " + ex.Message);
            return "";
        }
    }
}

你可能感兴趣的:(CSharp 版本的 AES 加解密)