利用CryptoStream进行加密解密

 public class DBSecurity
    {
       //sKey sIV这两个自己随意设定,不能外泄
        private const string sKey = "11,22,33,43,34,56,65,78";
        private const string sIV = "12,23,21,34,65,56,85,96";
        # region 加密解密
        //方法 
        //加密方法 
        public static string Encrypt(string pToEncrypt)
        {
            try
            {
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                //把字符串放到byte数组中             
                byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);

                //建立加密对象的密钥和偏移量

                byte[] b_key = new byte[8];
                string[] s_keys = new string[8];
                s_keys = sKey.Split(',');


                for (int i = 0; i <= 7; i++)
                {
                    b_key[i] = Convert.ToByte(s_keys[i].ToString());
                }

                des.Key = b_key;

                byte[] b_iv = new byte[8];
                string[] s_ivs = new string[8];
                s_ivs = sIV.Split(',');


                for (int i = 0; i <= 7; i++)
                {
                    b_iv[i] = Convert.ToByte(s_ivs[i].ToString());
                }

                des.IV = b_iv;


                MemoryStream ms = new MemoryStream();
                CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
                //Write the byte array into the crypto stream 
                //(It will end up in the memory stream) 
                cs.Write(inputByteArray, 0, inputByteArray.Length);
                cs.FlushFinalBlock();
                //Get the data back from the memory stream, and into a string 
                StringBuilder ret = new StringBuilder();
                foreach (byte b in ms.ToArray())
                {
                    //Format as hex 
                    ret.AppendFormat("{0:X2}", b);
                }
                ret.ToString();
                return ret.ToString();
            }
            catch
            {
                return "";
            }

        }


        //解密方法 
        public static string Decrypt(string pToDecrypt)
        {
            try
            {
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();

                //Put the input string into the byte array 
                byte[] inputByteArray = new byte[pToDecrypt.Length / 2];
                for (int x = 0; x < pToDecrypt.Length / 2; x++)
                {
                    int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
                    inputByteArray[x] = (byte)i;
                }

                //建立加密对象的密钥和偏移量,此值重要,不能修改 
                byte[] b_key = new byte[8];
                string[] s_keys = new string[8];
                s_keys = sKey.Split(',');


                for (int i = 0; i <= 7; i++)
                {
                    b_key[i] = Convert.ToByte(s_keys[i].ToString());
                }

                des.Key = b_key;

                byte[] b_iv = new byte[8];
                string[] s_ivs = new string[8];
                s_ivs = sIV.Split(',');


                for (int i = 0; i <= 7; i++)
                {
                    b_iv[i] = Convert.ToByte(s_ivs[i].ToString());
                }

                des.IV = b_iv;


                MemoryStream ms = new MemoryStream();
                CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
                //Flush the data through the crypto stream into the memory stream 
                cs.Write(inputByteArray, 0, inputByteArray.Length);
                cs.FlushFinalBlock();

                //Get the decrypted data back from the memory stream 
                //建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象 
                StringBuilder ret = new StringBuilder();

                return System.Text.Encoding.Default.GetString(ms.ToArray());
            }
            catch (Exception exp)
            {
                string s = exp.Message.ToString();
                return "";
            }
        }


        #endregion
    }

 

转载于:https://www.cnblogs.com/zhouxiuquan/p/3435007.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值