.net 对称加密算法的类

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Security.Cryptography;
using System.Text;

/// <summary>
/// SymmetryEncry 的摘要说明
/// </summary>
public class SymmetryEncry
{
    private SymmetricAlgorithm EncryptionService;
    private string Key, IV;
    ///
    /// 对称加密类的构造函数
    ///
    public SymmetryEncry()
    {
        EncryptionService = new RijndaelManaged();
        Key = “fffffffffffffffffffffffffffffffeeeeeeeeeeeeeeeeeeeeefffffffffffffddddd”; // 任意字符串
        IV = “fsdfhasdfhsdjafhakdhfjahjfdhfkjsahfdkhsdjfhdaskjhfdkajshfkshdafkakjahfk”;//任意字符串
    }
    /// <summary>
    /// 对称加密类的构造函数,实例化初始化Key,Iv值
    /// </summary>
    /// <param name=”key”>密匙</param>
    public SymmetryEncry(string key)
    {
        EncryptionService = new RijndaelManaged();
        Key = key; // 任意字符串
        IV = “fsdfhasdfhsdjafhakdhfjahjfdhfkjsahfdkhsdjfhdaskjhfdkajshfkshdafkakjahfk”;//任意字符串
    }
    /// <summary>
    /// 对称加密类的构造函数,实例化初始化Key,Iv值
    /// </summary>
    /// <param name=”key”>密匙</param>
    /// <param name=”iv”>向量IV</param>
    public SymmetryEncry(string key, string iv)
    {
        EncryptionService = new RijndaelManaged();//Rijndael 算法的托管版本,所有对称加密算法的所有实现必须从Rijndael继承。
        Key = key;
        IV = iv;
    }

    /// <summary>
    /// 写入或得到自定义的密匙KEY
    /// </summary>
    public string key
    {
        set
        {
            Key = value;
        }
        get
        {
            return Key;
        }
    }

    /// <summary>
    /// 写入或得到自定义的向量IV
    /// </summary>
    public string iv
    {
        set
        {
            IV = value;
        }
        get
        {
            return IV;
        }
    }

    /// <summary>
    /// 获得密钥
    /// </summary>
    /// <returns>密钥</returns>
    private byte[] GetKey()
    {
        string sTemp = Key;
        EncryptionService.GenerateKey();//生成随机KEY
        byte[] bytTemp = EncryptionService.Key;//把获取的密匙付值给BYTTEMP
        int KeyLength = bytTemp.Length;//获取元素总数
        if (sTemp.Length > KeyLength)//判断变量KEY的长度是否大于元素的总数
            sTemp = sTemp.Substring(0, KeyLength);//如果TRUE,那么从字符开始的地方截取以元素总数为最大限的字符。
        else if (sTemp.Length < KeyLength)//判断变量KEY的长度是否小于元素的总数
            sTemp = sTemp.PadRight(KeyLength, ‘ ‘);//左对齐STEMP字符串,并以空格来填充,长度达到元素的总数。
        return ASCIIEncoding.ASCII.GetBytes(sTemp);//对 Unicode 字符数组中或 String 中指定范围的字符进行编码(单个7位),并将结果存储在指定的字节数组中。
    }
    /// <summary>
    /// 获得初始向量IV
    /// </summary>
    /// <returns>初始向量IV</returns>
    private byte[] GetIV()
    {
        string sTemp = IV;
        EncryptionService.GenerateIV();
        byte[] bytTemp = EncryptionService.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);//对 Unicode 字符数组中或 String 中指定范围的字符进行编码(单个8位),并将结果存储在指定的字节数组中,把结果付给字节数组。
        MemoryStream ms = new MemoryStream();//创建其支持存储区为内存的流。
        EncryptionService.Key = GetKey();//设置KEY的值.
        EncryptionService.IV = GetIV();//设置向量IV的值.
        ICryptoTransform encrypto = EncryptionService.CreateEncryptor();//创建基本的加密对象
        CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);//将MS流转换为加密流,以encrypto对流进行加密转换。CryptoStreamMode模式为写访问。
        cs.Write(bytIn, 0, bytIn.Length);//将BYTIN字节数组全部写入加密流。
        cs.FlushFinalBlock();//用缓冲区的当前状态更新基础数据源或储存库,随后清除缓冲区。
        ms.Close();//关闭MS流。
        byte[] bytOut = ms.ToArray();//将整个流内容写入字节数组并付给BYTOUT字节数组。
        return Convert.ToBase64String(bytOut);//将单个为8位的字节数组转换为字符串,并64为基的数字组成。
    }

    /// <summary>
    /// 解密方法
    /// </summary>
    /// <param name=”Source”>待解密的串</param>
    /// <returns>经过解密的串</returns>
    public string Decrypto(string Source)
    {
        byte[] bytIn = Convert.FromBase64String(Source);//把一个得到的64位为基数字组成的字符串转换为8位数组并付给一个字节数组。
        MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);//把字节数组写入流。
        EncryptionService.Key = GetKey();//设置KEY的值
        EncryptionService.IV = GetIV();//设置向量IV的值
        ICryptoTransform encrypto = EncryptionService.CreateDecryptor();//创建基本的加密对象
        CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);//将MS流转换为加密流,以encrypto对流进行加密转换。CryptoStreamMode模式为读访问。
        StreamReader sr = new StreamReader(cs);//从加密流中读取字符。
        return sr.ReadToEnd();//得到一个从加密流开始位置到结束的字符。
    }
}

    原文作者:加密算法
    原文地址: http://www.cnblogs.com/agloat/articles/875166.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞