用C#實(shí)現(xiàn)的數(shù)據(jù)加密(一)——對(duì)稱加密算法

字號(hào):

用C#實(shí)現(xiàn)的數(shù)據(jù)加密(一) —— 對(duì)稱加密算法
    以下是關(guān)于對(duì)稱加密算法的C#實(shí)現(xiàn)代碼,大家可以根據(jù)需要更改不同的算法,文中以Rijndael算法為例:
    using System;
    using System.IO;
    using System.Security.Cryptography;
    using System.Text;
    namespace DataCrypto
    {
    ///
    /// 對(duì)稱加密算法類
    ///

    public class SymmetricMethod
    {
    private SymmetricAlgorithm mobjCryptoService;
    private string Key;
    ///
    /// 對(duì)稱加密類的構(gòu)造函數(shù)
    ///

    public SymmetricMethod()
    {
    mobjCryptoService = new RijndaelManaged();
    Key = "Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7";
    }
    ///
    /// 獲得密鑰
    ///

    /// 密鑰
    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);
    }
    ///
    /// 獲得初始向量IV
    ///

    /// 初試向量IV
    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);
    }
    ///
    /// 加密方法
    ///

    /// 待加密的串
    /// 經(jīng)過(guò)加密的串
    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);
    }
    ///
    /// 解密方法
    ///

    /// 待解密的串
    /// 經(jīng)過(guò)解密的串
    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();
    }
    }
    }