用C#自已封装的对称加密算法(VS.Net2005)

前几天发送的是在.Net2003下平台下封装的类,今天拿到2005下竟有错误发生。提示如:

"要解密的数据的长度无效。的错误信息 ", 经过跟踪调试发现,在加密返回字符串前的字节长度与解密字符变成字节数组的长度却不相等,开始百思不得其解,为什么在2003下面可以用却在2005下面出现这样的情况,于是继续查找关于编码方面的关相资料。问题原来确实出在编码方式上,原来2005下加密返回的是Base64编码(即简单讲是所谓3字节变4节的编码方式,即3*8变成4*8),我在加密返回字符串时用 Convert.ToBase64String(output);解密字符串前用 byte[] input = Convert.FromBase64String(password);问题得到完美解决(附代码如下:)

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

namespace  PV.BLL.Security
{
    
/// <summary>
    
/// 对称加密接口
    
/// </summary>

    interface IEncrypt
    
{
        
/// <summary>
        
/// 加密
        
/// </summary>
        
/// <param name="password">需加密的字符串</param>
        
/// <returns>加密后的字符串</returns>

        string Encrypt(string password);
        
/// <summary>
        
/// 解密
        
/// </summary>
        
/// <param name="password">需解密的字符串</param>
        
/// <returns>解密后的字符串</returns>

        string Decrypt(string password);
        
/// <summary>
        
/// 字节数组加密
        
/// </summary>
        
/// <param name="passowrd">字节数组</param>
        
/// <returns>字节数组</returns>

        byte[] Encrypt(ref byte[] passowrd);
        
/// <summary>
        
/// 字节数组解密
        
/// </summary>
        
/// <param name="password">字节数组</param>
        
/// <returns>字节数组</returns>

        byte[] Decrypt(ref byte[] password);
    }


    
/// <summary>
    
/// 枚举
    
/// </summary>

    public enum EncryptType { Rijndael = 0, SHA1 = 1, DES = 2,};

    
/// <summary>
    
/// 对称加密类
    
/// </summary>

    public class RijndaelEncrypt : IEncrypt
    
{
        
//加密常量
        private byte[] Key = 2381102319466432921441640118976321619811023272216311281331221082478678916};
        
//加密密钥
        private  byte[] IV = {198,110,23,27,22,163,11,28,133,122,108,24,78,67,89,16};
        
//加密类成员
        private RijndaelManaged _rijndael;

         
public RijndaelEncrypt()
        
{
            _rijndael 
= new RijndaelManaged();
        }


        
IEncrypt 字符串成员     
    
        
IEncrypt 字节成员
    }


    
/// <summary>
    
/// 对应加解密类 采用策略模式
    
/// </summary>

    public class PVEncrypt : IEncrypt 
    
{
        
private  IEncrypt _encrypt;
        
private  RijndaelEncrypt _rijndael;

        
public PVEncrypt()
        
{
            _rijndael 
= new RijndaelEncrypt();
            _encrypt 
= (IEncrypt)_rijndael;
        }


        
public PVEncrypt(EncryptType type)
        
{
            
switch (type)
            
{               
                
case EncryptType.SHA1:
                    
throw new Exception("还未实现SHA1加密算法");
                
case EncryptType.DES:
                    
throw new Exception("还未实现DES加密算法");
                
case EncryptType.Rijndael:           
                
default:
                    _rijndael 
= new RijndaelEncrypt();
                    _encrypt 
= (IEncrypt)_rijndael;
                    
break;
            }

        }


        
IEncrypt 成员
    }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值