用C#自已封装的对称加密算法

抽象出接口,可以得到字节数组和字符串两种方式的对称加解密:

VS2005(http://blog.csdn.net/seamonkey/archive/2007/03/21/1536059.aspx)作了小的调整才能编译通过.

 using System;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;
using System.Security.Cryptography;

namespace NMS.BR.Common
{
 public interface IEncrypt
 {
        byte[] Encrypt(ref byte[] arryByte);
  byte[] DeEncrypt(ref byte[] arryByte);

  string Encrypt(ref string strPassword);
  string DeEncrypt(ref string strPassword);
 }

 /// <summary>
 /// Encrypt 加密类
 /// </summary>
 public class RijndaelEncrypt : IEncrypt
 {
  /// <summary>
  /// 密钥
  /// </summary>
  private byte[] _key = {0x01, 0x02, 0x03, 0x04, 0x05, 0xf6, 0x07, 0x08, 0x09, 0x10, 0x11, 0x02, 0x13, 0x14, 0x15, 0x16};
  /// <summary>
  /// 随机向量
  /// </summary>
  private byte[] _IV = {0x01, 0x02, 0x03, 0xd4, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x04, 0x15, 0x16};
  /// <summary>
  /// Rijndael对称加密算法加密对象
  /// </summary>
  ICryptoTransform _encryptor;
  /// <summary>
  /// Rijndael解密对象
  /// </summary>
  ICryptoTransform _deEncryptor;

  /// <summary>
  /// 字符串编码器
  /// </summary>
  Coder _enCoder = null;

  public RijndaelEncrypt()
  {
   //初始化字符串编码器
   _enCoder = new Coder(Coder.EncodingMothord.Default);

   RijndaelManaged enryManage = new RijndaelManaged();

   enryManage.Key = this._key;
   enryManage.IV = this._IV;

   _encryptor = enryManage.CreateEncryptor();

   _deEncryptor = enryManage.CreateDecryptor();
  }

  public RijndaelEncrypt(ref Coder enCoder)
  {
   //初始化字符串编码器
   _enCoder = enCoder;

   RijndaelManaged enryManage = new RijndaelManaged();

   enryManage.Key = this._key;
   enryManage.IV = this._IV;

   _encryptor = enryManage.CreateEncryptor();

   _deEncryptor = enryManage.CreateDecryptor();
  }

  #region IEncrypt 成员

  public byte[] Encrypt(ref byte[] arryByte)
  {
   byte[] encrypted;
   
   //加密数据
   MemoryStream msEncrypt = new MemoryStream();
   CryptoStream csEncrypt = new CryptoStream(msEncrypt, this._encryptor, CryptoStreamMode.Write);
   
   //写入所有字节
   csEncrypt.Write(arryByte, 0, arryByte.Length);
   csEncrypt.FlushFinalBlock();

   //取得加密后的字节数组
   encrypted = msEncrypt.ToArray();

   //返回
   return encrypted;
  }

  public byte[] DeEncrypt(ref byte[] arryByte)
  {
   byte[] fromEncrypt;
   byte[] resultByte;

   //解密数据
   MemoryStream msEncrypt = new MemoryStream(arryByte);
   CryptoStream csDencrypt = new CryptoStream(msEncrypt, this._deEncryptor, CryptoStreamMode.Read);
   
   fromEncrypt = new byte[arryByte.Length];
   
   //读取字节数据
   int nLength = csDencrypt.Read(fromEncrypt, 0, fromEncrypt.Length);

   resultByte = new byte[nLength];

   for(int i = 0; i < nLength; i++)
   {
    resultByte[i] = fromEncrypt[i];
   }
           
   return resultByte;
  }

  public string Encrypt(ref string strPassword)
  {
   //System.Text.UnicodeEncoding unicodeEnc = new UnicodeEncoding();
   
   string strEncrypted;
   byte[] encrypted;

   //unicodeEnc.GetBytes(strPassword);
   byte[] preEncrypt = _enCoder.GetEncodingBytes(strPassword);    
   
   //加密
   encrypted = this.Encrypt(ref preEncrypt);
   
   //unicodeEnc.GetString(encrypted, 0, encrypted.Length);
   strEncrypted = _enCoder.GetEncodingString(encrypted, encrypted.Length);    

   return strEncrypted;
  }

  public string DeEncrypt(ref string strPassword)
  {
   //System.Text.UnicodeEncoding unicodeEnc = new UnicodeEncoding();
   string strDeEncrypted;
   byte[] deEncrypted;
   
   //unicodeEnc.GetBytes(strPassword);
   byte[] preDeEncrypt = _enCoder.GetEncodingBytes(strPassword);    
   
   deEncrypted = this.DeEncrypt(ref preDeEncrypt);

   //unicodeEnc.GetString(deEncrypted, 0, deEncrypted.Length);
   strDeEncrypted = _enCoder.GetEncodingString(deEncrypted, deEncrypted.Length);    

   return strDeEncrypted;
  }

  #endregion
 }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值