

/**/////////////////////////////////////////////////////

//可逆加密

using System;

using System.IO;

using System.Security.Cryptography;


using System.Text;


namespace TeaProject.Forms


...{


/**//// <summary>

/// 對稱加密算法類

/// </summary>

public class KeyPwd


...{

private SymmetricAlgorithm mobjCryptoService;

private string Key;


/**//// <summary>

/// 對稱加密類的構造函數

/// </summary>

public KeyPwd()


...{

mobjCryptoService = new RijndaelManaged();

Key = "1@#^dfdsfsd345+)8*sdfdsfsda+";

}


/**//// <summary>

/// 獲得密鑰

/// </summary>

/// <returns>密鑰</returns>

private byte[] GetLegalKey()


...{

string sTemp = Key;

mobjCryptoService.GenerateKey();

byte[] bytTemp = mobjCryptoService.Key;

int KeyLength = bytTemp.Length;

if (sTemp.Length > KeyLength)

sTemp = sTemp.Substring(0, KeyLength);

else if (sTemp.Length < KeyLength)

sTemp = sTemp.PadRight(KeyLength, '' '');

return ASCIIEncoding.ASCII.GetBytes(sTemp);

}


/**//// <summary>

/// 獲得初始向量IV

/// </summary>

/// <returns>初試向量IV</returns>

private byte[] GetLegalIV()


...{

string sTemp = "E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk";

mobjCryptoService.GenerateIV();

byte[] bytTemp = mobjCryptoService.IV;

int IVLength = bytTemp.Length;

if (sTemp.Length > IVLength)

sTemp = sTemp.Substring(0, IVLength);

else if (sTemp.Length < IVLength)

sTemp = sTemp.PadRight(IVLength, '' '');

return ASCIIEncoding.ASCII.GetBytes(sTemp);

}


/**//// <summary>

/// 加密方法

/// </summary>

/// <param name="Source">待加密的串</param>

/// <returns>經過加密的串</returns>

public string Encrypto(string Source)


...{

byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source);

MemoryStream ms = new MemoryStream();

mobjCryptoService.Key = GetLegalKey();

mobjCryptoService.IV = GetLegalIV();

ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();

CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);

cs.Write(bytIn, 0, bytIn.Length);

cs.FlushFinalBlock();

ms.Close();

byte[] bytOut = ms.ToArray();

return Convert.ToBase64String(bytOut);

}


/**//// <summary>

/// 解密方法

/// </summary>

/// <param name="Source">待解密的串</param>

/// <returns>經過解密的串</returns>

public string Decrypto(string Source)


...{

byte[] bytIn = Convert.FromBase64String(Source);

MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);

mobjCryptoService.Key = GetLegalKey();

mobjCryptoService.IV = GetLegalIV();

ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();

CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);

StreamReader sr = new StreamReader(cs);

return sr.ReadToEnd();

}

}

}