AppEncrypts helper.提供加密解密的一个通用类

来源:互联网 发布:马尔科夫链的转移矩阵 编辑:程序博客网 时间:2024/04/29 08:51
 

在.NET中,我们可以直接使用System.Security.Cryptography空间中的通过加密/解密类进行操作.
这几天在玩数据加密的时候用到了.
感觉用起来不是很方便.
于是写了一个通用(hoho,算是比较通用的吧)的加密/解密的类.
现在只完成了对称加密类的封装.
代码:

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

namespace CnBlogs.Helper.hBifTs
{

    
#region AppEncrypt
    
/// <summary>
    
/// AppEncrypt : 抽象类,用于提供加密/解密类的基本功能.
    
/// </summary>

    public abstract class AppEncrypt : IDisposable{
        
#region Private variable & propery
        
protected byte[] key;
        
protected byte[] iv;

        
protected ICryptoTransform CryptoTrans;
        
protected SymmetricAlgorithm CryptObj;

        
public byte[] Key{
            
getreturn key;}
            
set{ key = value;}
        }


        
public byte[] IV
        
{
            
getreturn iv;}
            
set{ iv = value;}
        }


        
public AppEncrypt(byte[] Key,byte[] IV){
            key 
= Key;
            iv 
= IV;
        }

        
#endregion


        
Dispose

        
Common Function
    }

    
#endregion


    
DESEncrypt

    
TripleDESEncrypt

    
RC2Encrypt

    
RijndaelEncrypt
}



使用只要直接调用基类的Encrypt和Dencrypt函数即可..
测试用例如下:
using System;
using System.IO;
using System.Text;
using CnBlogs.Helper.hBifTs;
using NUnit.Framework;


namespace CnBlogs.Helper.hBifTs.TestCases
{
    
/// <summary>
    
/// Summary description for TestAppEncrypt.
    
/// </summary>
    
/// 

    [TestFixture]
    
public class TestAppEncrypt
    
{
        
private AppEncrypt enc;
        
private MemoryStream mem;

        
public TestAppEncrypt()
        
{
        }


        [SetUp] 
public void Setup(){
            
byte[] msg = Encoding.Unicode.GetBytes("hello,I got the new world,猪啊..");
            mem 
= new MemoryStream( msg);
        }


        [TearDown] 
public void TearDown(){
            mem.Close();
        }


        
public void Common(){
            Stream dest 
= new MemoryStream();
            enc.Encrypt( mem,
ref dest);
            Stream dest1 
= new MemoryStream( ((MemoryStream)dest).ToArray());
            Stream dest2 
= new MemoryStream();
            enc.Dencrypt( dest1,
ref dest2);
            Assert.AreEqual( Encoding.Unicode.GetString(mem.ToArray()),Encoding.Unicode.GetString(((MemoryStream)dest2).ToArray()));
        }


        [Test] 
public void TestDES(){
            enc 
= new DESEncrypt();
            Common();
        }


        [Test] 
public void TestTripleDES(){
            enc 
= new TripleDESEncrypt();
            Common();
        }


        [Test] 
public void TestRC2(){
            enc 
= new RC2Encrypt();
            Common();
        }


        [Test] 
public void TestRijndael(){
            enc 
= new RijndaelEncrypt();
            Common();
        }

    }

}


灵感之源的要求,提供代码下载: AppEncrypts.zip
 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1353526

原创粉丝点击