Tcp的AES加密和AES 解密

时间:2024-04-15 12:23:46

主要用于我们使用TCP传输内容时 我们需要对传输的内容进行加密传输

下面的参数str就是tcp需要传输的内容

密钥就是加密和解密需要提供一组相同的字符

加密模式

填充方式

        /// <summary>
        /// 将目标字符串进行AES加密
        /// IV和Key均为secretKey
        /// </summary>
        /// <param name="str">被加密字符串</param>
        /// <param name="secretKey">秘钥</param>
        /// <param name="mode">加密模式</param>
        /// <param name="padding">填充方式</param>
        /// <returns></returns>
        public static string ToEncryptAes(this string str, string secretKey, CipherMode mode, PaddingMode padding)
        {
            if (str.IsNullOrWhiteSpace()) return null;
            var toEncryptArray = Encoding.UTF8.GetBytes(str);
            IV = "1954682168745975";//IV是偏移量
            var rm = new RijndaelManaged
            {
                IV = IV ,
                Key = Encoding.UTF8.GetBytes(secretKey),
                Mode = mode,
                Padding = padding
            };
             //如果对加密方式和上面的参数值不了解 可以查看下面的解密方法 得出参数定义形式
            var cTransform = rm.CreateEncryptor();
            var resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

            return Convert.ToBase64String(resultArray, 0, resultArray.Length);
        }

        #region AES 解密
        /// <summary>
        ///  AES 解密
        /// </summary>
        /// <param name="str">明文(待解密)</param>
        /// <param name="key">密文</param>
        /// <returns></returns>
        public static string AesDecrypt(string str, string key)
        {
            if (string.IsNullOrEmpty(str)) return null;
            Byte[] toEncryptArray = Convert.FromBase64String(str);
            RijndaelManaged rm = new RijndaelManaged
            {
                Key = Encoding.UTF8.GetBytes(key),
                //偏移量
                IV = Encoding.UTF8.GetBytes("1954682168745975"),
                Mode = CipherMode.CBC,
                Padding = PaddingMode.PKCS7
            };
            ICryptoTransform cTransform = rm.CreateDecryptor();
            Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
            return Encoding.UTF8.GetString(resultArray);
        }
        #endregion