加密你的字符串

来源:互联网 发布:守底线 知敬畏 编辑:程序博客网 时间:2024/05/18 01:23

using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
using System.IO;

namespace Encryption
{
   
    /// <summary>
    /// 完成字符串的散列生成,以及3DES加密解密码
    /// </summary>
    public class EncryptTransformer
    {
        private string mIV;
        private string mKey;
        private byte[] bIV;
        private byte[] bKey;
        private TripleDES tDes ;
        /// <summary>
        /// 解密3DES加密字符串时的构造函数
        /// </summary>
        /// <param name="key"></param>
        /// <param name="iv"></param>
        public EncryptTransformer(string key, string iv)
        {
            Key = key;
            IV = iv;
            InitEncryptTransformer();
        }
        /// <summary>
        /// 加密数据时用的构造函数
        /// 系统自动生成Key,与IV的Base64字符串
        /// 请妥协保存
        /// </summary>
        public EncryptTransformer()
        {
            InitEncryptTransformer();
        }
        /// <summary>
        /// 用3DES加密字符串,结果已Base64编码返回
        /// </summary>
        /// <param name="inStr">需要加密的字符串</param>
        /// <returns>Base64编码的加密字符串</returns>
        public string EncryptString(string inStr)
        {
            byte[] bytes = Encoding.UTF8.GetBytes(inStr);
            ICryptoTransform enTransform= tDes.CreateEncryptor(bKey, bIV);
            MemoryStream ms = new MemoryStream(); 
            CryptoStream cs = new CryptoStream(ms, enTransform, CryptoStreamMode.Write);
            cs.Write(bytes, 0, bytes.Length);
            cs.FlushFinalBlock();
            cs.Close();
            return Convert.ToBase64String(ms.ToArray());
           
        }
        /// <summary>
        /// 解密编码为Base64的加密字符串
        /// </summary>
        /// <param name="inStr">Base64编码的加密字符串</param>
        /// <returns>原字符串数据</returns>
        public string DecryptString(string inStr)
        {
            byte[] bytes = Convert.FromBase64String(inStr);
            ICryptoTransform deTransfrom = tDes.CreateDecryptor(bKey, bIV);
            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms,deTransfrom,CryptoStreamMode.Write);
            cs.Write(bytes, 0, bytes.Length);
            cs.FlushFinalBlock();
            cs.Close();
            return Encoding.UTF8.GetString(ms.ToArray());
           
        }
        private void InitEncryptTransformer()
        {
            tDes= new TripleDESCryptoServiceProvider();
            if (Key == null || IV==null)
            {
                tDes.GenerateIV();
                bIV = tDes.IV;
                tDes.GenerateKey();
                bKey = tDes.Key;
                Key = Convert.ToBase64String(bKey);
                IV = Convert.ToBase64String(bIV);
            }
            else
            {
                bIV = Convert.FromBase64String(IV);
                bKey = Convert.FromBase64String(Key);
            }


        }
        /// <summary>
        /// 将字符串数据以MD5加密后编码成Base64
        /// </summary>
        /// <param name="inStr"></param>
        /// <returns></returns>
        public static string MD5(string inStr)
        {
            MD5 md5 = new MD5CryptoServiceProvider();
            byte[] bytes = Encoding.UTF8.GetBytes(inStr);
            byte[] enBytes = md5.ComputeHash(bytes);
            return Convert.ToBase64String(enBytes);
        }
        /// <summary>
        /// Base64编码的向量字符串
        /// </summary>
        public string IV
        {
            get
            {
                return mIV;
            }
            set
            {
                mIV = value;
                bIV = Convert.FromBase64String(value);

            }

        }
        /// <summary>
        /// Base64编码的密码
        /// </summary>
        public string Key
        {

            get
            {
                return mKey;
            }
            set
            {

                mKey = value;
                bKey = Convert.FromBase64String(value);
            }
        }
    }

}

原创粉丝点击