加密url发生 Invalid length for a Base-64 char array异常

类是转自: http://forums.asp.net/t/1222829.aspx,但是有些问题,现在把解决方法共享下,很简单的

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


/**/ /// <summary>
/// Summary description for Encryption64
/// </summary>

public   class  Encryption64
{
    
const string DESKey = "AQWSEDRF";
    
const string DESIV = "HGFEDCBA";

    
public static string DESDecrypt(string stringToDecrypt)//Decrypt the content
    {

        
byte[] key;
        
byte[] IV;

        
byte[] inputByteArray;
        
try
        
{

            key 
= Convert2ByteArray(DESKey);

            IV 
= Convert2ByteArray(DESIV);

            
int len = stringToDecrypt.Length;

          
//  stringToDecrypt =stringToDecrypt.Replace(" ","+");
            inputByteArray = Convert.FromBase64String(stringToDecrypt);


            DESCryptoServiceProvider des 
= new DESCryptoServiceProvider();

            MemoryStream ms 
= new MemoryStream();

            CryptoStream cs 
= new CryptoStream(ms, des.CreateDecryptor(key, IV), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 
0, inputByteArray.Length);

            cs.FlushFinalBlock();

            Encoding encoding 
= Encoding.UTF8; return encoding.GetString(ms.ToArray());
        }


        
catch (System.Exception ex)
        
{

            
throw ex;
        }

    }


    
public static string DESEncrypt(string stringToEncrypt)// Encrypt the content
    {

        
byte[] key;
        
byte[] IV;

        
byte[] inputByteArray;
        
try
        
{

            key 
= Convert2ByteArray(DESKey);

            IV 
= Convert2ByteArray(DESIV);

            inputByteArray 
= Encoding.UTF8.GetBytes(stringToEncrypt);
            DESCryptoServiceProvider des 
= new DESCryptoServiceProvider();

            MemoryStream ms 
= new MemoryStream(); CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(key, IV), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 
0, inputByteArray.Length);

            cs.FlushFinalBlock();

            
string value = Convert.ToBase64String(ms.ToArray());
          
//  value = value.Replace("+"," ");

            
return value;
        }


        
catch (System.Exception ex)
        
{

            
throw ex;
        }


    }


    
static byte[] Convert2ByteArray(string strInput)
    
{

        
int intCounter; char[] arrChar;
        arrChar 
= strInput.ToCharArray();

        
byte[] arrByte = new byte[arrChar.Length];

        
for (intCounter = 0; intCounter <= arrByte.Length - 1; intCounter++)
            arrByte[intCounter] 
= Convert.ToByte(arrChar[intCounter]);

        
return arrByte;
    }




}


以上代码大部分时间运行是正常的,但是加密得出的字符串如果包含"+",用 Request.QueryString接收,"+"字符会漏掉,
解密的时候就会报 Invalid length for a Base-64 char array异常,所以加密后要替换下
             string  value  =  Convert.ToBase64String(ms.ToArray());
            value 
=  value.Replace( " + " , "   " );
解密时就要替换回来
            stringToDecrypt  = stringToDecrypt.Replace( "   " , " + " );
            inputByteArray 
=  Convert.FromBase64String(stringToDecrypt);

希望对您有帮助,弄了好久才发现的。。。

转载于:https://www.cnblogs.com/puretime/archive/2008/06/26/1230577.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值