美文网首页
CSharp 版本的 AES 加解密

CSharp 版本的 AES 加解密

作者: 雁过留声_泪落无痕 | 来源:发表于2022-09-12 11:23 被阅读0次

    直接看代码

    /**
     * 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 加解密

          本文链接:https://www.haomeiwen.com/subject/oythortx.html