c# 对称加密、解密

        private SymmetricAlgorithm cryptoService = new RijndaelManaged(); //用户加密类
        private VerifyApi verifyApi = new VerifyApi(true);

        /// <summary>
        /// 加密用户, 加密加入固定字符串+当前日期
        /// </summary>
        /// <param name="userName">用户名</param>
        /// <returns></returns>
        [HttpGet]
        public ApiResult<string> EncryptUser(string userName)
        {
            ApiResult<string> result = new ApiResult<string>();
            try
            {
                if (!string.IsNullOrEmpty(userName))
                {
                    //加当前时间,用于解密超时
                    string t = userName + "&" + DateTime.Now;
                    byte[] bytIn = UTF8Encoding.UTF8.GetBytes(t);
                    MemoryStream ms = new MemoryStream();
                    cryptoService.Key = GetLegalKey();
                    cryptoService.IV = GetLegalIV();
                    //创建对称加密器对象 [Page]
                    ICryptoTransform encrypto = cryptoService.CreateEncryptor();
                    //定义将数据流链接到加密转换的流 
                    CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
                    cs.Write(bytIn, 0, bytIn.Length);
                    cs.FlushFinalBlock();
                    ms.Close();
                    byte[] bytOut = ms.ToArray();
                    result.Data = Convert.ToBase64String(bytOut);
                }
            }
            catch (Exception ex)
            {
                result.ErrorMessage = ex.Message;
            }
            return result;
        }

        /// <summary> 
        /// 解密方法 
        /// </summary> 
        /// <param name="Source">待解密的串</param> 
        /// <returns>经过解密的串</returns>
        [HttpGet]
        public ApiResult<UserEntity> DecryptoUser(string Source)
        {
            ApiResult<UserEntity> result = new ApiResult<UserEntity>();
            try
            {
                if (!string.IsNullOrEmpty(Source))
                {
                    byte[] bytIn = Convert.FromBase64String(Source);
                    MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);
                    cryptoService.Key = GetLegalKey();
                    cryptoService.IV = GetLegalIV();
                    //创建对称解密器对象 
                    ICryptoTransform encrypto = cryptoService.CreateDecryptor();
                    //定义将数据流链接到加密转换的流 
                    CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
                    StreamReader sr = new StreamReader(cs);
                    string t = sr.ReadToEnd();
                    if (!string.IsNullOrEmpty(t))
                    {
                        string[] arr = t.Split('&');
                        if (arr != null && arr.Count() == 2)
                        {
                            DateTime d = Convert.ToDateTime(arr[1]);
                            DateTime c = DateTime.Now;
                            TimeSpan ts = c - d;
                            int m = ts.Minutes;
                            if (m <= 2)
                            {
                                //根据用户账号获取用户对象
                                string account = arr[0]; 
                                UserEntity userEntity = verifyApi.loginuser(account);
                                result.Data = userEntity;
                            }
                            else {
                                result.ErrorMessage = "验证超时!";
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                result.ErrorMessage = ex.Message;
            }
            return result;
        }

        //// <summary> 
        /// 获得密钥 
        /// </summary> 
        /// <returns>密钥</returns> 
        private byte[] GetLegalKey()
        {
            string _TempKey = "\"gdxtyhjmgdzfc20230526144201\"";
            cryptoService.GenerateKey();
            byte[] bytTemp = cryptoService.Key;
            int KeyLength = bytTemp.Length;
            if (_TempKey.Length > KeyLength)
                _TempKey = _TempKey.Substring(0, KeyLength);
            else if (_TempKey.Length < KeyLength)
                _TempKey = _TempKey.PadRight(KeyLength, ' ');
            return ASCIIEncoding.ASCII.GetBytes(_TempKey);
        }

         /// <summary> 
         /// 获得初始向量IV 
         /// </summary> 
         /// <returns>初试向量IV</returns> 
        private byte[] GetLegalIV()
        {
            string _TempIV = "\"@gdxtyhjmgdzfc20230526144201xl\"";
            cryptoService.GenerateIV();
            byte[] bytTemp = cryptoService.IV;
            int IVLength = bytTemp.Length;
            if (_TempIV.Length > IVLength)
                _TempIV = _TempIV.Substring(0, IVLength);
            else if (_TempIV.Length < IVLength)
                _TempIV = _TempIV.PadRight(IVLength, ' ');
            return ASCIIEncoding.ASCII.GetBytes(_TempIV);
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值