CryptTo
{
    /// <summary>
    
/// 根据任意字符生成Des密钥
    
/// </summary>
    
/// <param name="secret">生成密钥的种子字</param>
    
/// <returns>返回合格的Des密钥</returns>
    public static byte[] CreateKey(string secret)
    {
        
if ((secret == null|| (secret.Length == 0))
            
throw new ArgumentException("Secret is not valid");

        
byte[] temp;

        temp 
= Hash(new ASCIIEncoding().GetBytes(secret));

        
byte[] ret = new byte[24];

        
int i;

        
if (temp.Length < 24)
        {
            System.Array.Copy(temp, 
0, ret, 0, temp.Length);
            
for (i = temp.Length; i < 24; i++)
                ret[i] 
= 0;
        }
        
else
            System.Array.Copy(temp, 
0, ret, 024);

        
return ret;
    }

    
/// <summary>
    
/// 根据任意字符生成Des密钥
    
/// </summary>
    
/// <param name="secret">生成密钥的种子字</param>
    
/// <returns>返回合格的Des密钥</returns>
    public static string GenerateKey(string secret)
    {
        
return Convert.ToBase64String(CreateKey(secret));
    }

    
/// <summary>
    
/// 随机生成Des密钥
    
/// </summary>
    
/// <returns>返回合格的Des密钥</returns>
    public static string GenerateKey()
    {
        
string ret;
        TripleDESCryptoServiceProvider TDES 
= new TripleDESCryptoServiceProvider();

        TDES.GenerateKey();
        ret 
= Convert.ToBase64String(TDES.Key);

        
return (ret);
    }

    
/// <summary>
    
/// 使用TripledDES加密
    
/// </summary>
    
/// <param name="content">要加密的内容</param>
    
/// <param name="secret">密钥</param>
    
/// <returns>加密后的结果</returns>
    public static string Encrypt(string content, string secret)
    {
        
if ((content == null|| (secret == null|| (content.Length == 0|| (secret.Length == 0))
            
throw new ArgumentNullException("Invalid Argument");

        
try
        {
            
byte[] Key = Convert.FromBase64String(secret);
            
byte[] ContentByte = Encoding.Unicode.GetBytes(content);
            
byte[] ContentCryptByte = Encrypt(ContentByte, Key);

            
return Convert.ToBase64String(ContentCryptByte);
        }
        
catch (Exception e)
        {
            
throw e;
        }
    }

    
/// <summary>
    
/// 使用TripledDES解密
    
/// </summary>
    
/// <param name="content">要解密的内容</param>
    
/// <param name="secret">密钥</param>
    
/// <returns>解密后的结果</returns>
    public static string Decrypt(string content, string secret)
    {
        
if ((content == null|| (secret == null|| (content.Length == 0|| (secret.Length == 0))
            
throw new ArgumentNullException("Invalid Argument");

        
try
        {
            
byte[] Key = Convert.FromBase64String(secret);
            
byte[] CryByte = Convert.FromBase64String(content);
            
byte[] DecByte = Decrypt(CryByte, Key);

            
return Encoding.Unicode.GetString(DecByte);
        }
        
catch (Exception e)
        {
            
throw e;
        }
    }

    
/// <summary>
    
/// 使用TripledDES加密
    
/// </summary>
    
/// <param name="source">要加密的内容</param>
    
/// <param name="key">密钥</param>
    
/// <returns>加密后的结果</returns>
    public static byte[] Encrypt(byte[] source, byte[] key)
    {
        
if ((source.Length == 0|| (source == null|| (key == null|| (key.Length == 0))
        {
            
throw new ArgumentException("Invalid Argument");
        }

        TripleDESCryptoServiceProvider dsp 
= new TripleDESCryptoServiceProvider();
        dsp.Mode 
= CipherMode.ECB;

        ICryptoTransform des 
= dsp.CreateEncryptor(key, null);

        
try
        {
            
return des.TransformFinalBlock(source, 0, source.Length);
        }
        
catch (Exception e1)
        {
            
throw e1;
        }
    }

    
/// <summary>
    
/// 使用TripledDES解密
    
/// </summary>
    
/// <param name="source">要解密的内容</param>
    
/// <param name="key">密钥</param>
    
/// <returns>解密后的结果</returns>
    public static byte[] Decrypt(byte[] source, byte[] key)
    {
        
if ((source.Length == 0|| (source == null|| (key == null|| (key.Length == 0))
        {
            
throw new ArgumentNullException("Invalid Argument");
        }

        TripleDESCryptoServiceProvider dsp 
= new TripleDESCryptoServiceProvider();
        dsp.Mode 
= CipherMode.ECB;

        ICryptoTransform des 
= dsp.CreateDecryptor(key, null);
        
try
        {
            
byte[] ret = new byte[source.Length + 8];

            des.TransformBlock(source, 
0, source.Length, ret, 0);
            ret 
= des.TransformFinalBlock(source, 0, source.Length);
            ret 
= des.TransformFinalBlock(source, 0, source.Length);
            
return ret;
        }
        
catch (Exception e1)
        {
            
throw e1;
        }
    }


    
/// <summary>
    
/// 使用md5计算散列
    
/// </summary>
    
/// <param name="source">要加密的内容</param>
    
/// <returns>加密后的结果</returns>
    public static byte[] Hash(byte[] source)
    {
        
if ((source == null|| (source.Length == 0))
            
throw new ArgumentException("source is not valid");

        MD5 m 
= MD5.Create();
        
return m.ComputeHash(source);
    }

    
/// <summary>
    
/// 使用md5计算散列
    
/// </summary>
    
/// <param name="source">要加密的内容</param>
    
/// <returns>加密后的结果</returns>
    public static string Hash(string source)
    {
        
// 两者的执行相同
        
// return BitConverter.ToString(Hash(Encoding.ASCII.GetBytes(source)));

        
return FormsAuthentication.HashPasswordForStoringInConfigFile(source, "md5");
    }


    
/// <summary>
    
/// 原始base64编码
    
/// </summary>
    
/// <param name="source"></param>
    
/// <returns></returns>
    public static byte[] Base64Encode(byte[] source)
    {
        
if ((source == null|| (source.Length == 0))
            
throw new ArgumentException("source is not valid");

        ToBase64Transform tb64 
= new ToBase64Transform();
        MemoryStream stm 
= new MemoryStream();
        
int pos = 0;
        
byte[] buff;

        
while (pos + 3 < source.Length)
        {
            buff 
= tb64.TransformFinalBlock(source, pos, 3);
            stm.Write(buff, 
0, buff.Length);
            pos 
+= 3;
        }

        buff 
= tb64.TransformFinalBlock(source, pos, source.Length - pos);
        stm.Write(buff, 
0, buff.Length);

        
return stm.ToArray();

    }

    
/// <summary>
    
/// 原始base64解码
    
/// </summary>
    
/// <param name="source"></param>
    
/// <returns></returns>
    public static byte[] Base64Decode(byte[] source)
    {
        
if ((source == null|| (source.Length == 0))
            
throw new ArgumentException("source is not valid");

        FromBase64Transform fb64 
= new FromBase64Transform();
        MemoryStream stm 
= new MemoryStream();
        
int pos = 0;
        
byte[] buff;

        
while (pos + 4 < source.Length)
        {
            buff 
= fb64.TransformFinalBlock(source, pos, 4);
            stm.Write(buff, 
0, buff.Length);
            pos 
+= 4;
        }

        buff 
= fb64.TransformFinalBlock(source, pos, source.Length - pos);
        stm.Write(buff, 
0, buff.Length);
        
return stm.ToArray();

    }

    
public static string ToBase64(string source)
    {
        
return Convert.ToBase64String(Encoding.Unicode.GetBytes(source));
    }

    
public static string FromBase64(string source)
    {
        
return Encoding.Unicode.GetString(Convert.FromBase64String(source));
    }
}

相关文章: