首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

des加密有关问题

2012-01-18 
des加密问题usingSystemusingSystem.DatausingSystem.ConfigurationusingSystem.CollectionsusingSyst

des加密问题
using   System;
using   System.Data;
using   System.Configuration;
using   System.Collections;
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.Text;
using   System.Security.Cryptography;
using   System.IO;
public   partial   class   Default2   :   System.Web.UI.Page
{
        private     string   secretKey1= "aa ";
        private   string   secretKey2= "bb ";

        protected   void   Page_Load(object   sender,   EventArgs   e)
        {
                this.Label1.Text   =   encrypt1( "aa ");
             
        }
        ///   <summary>
        ///   一次加密
        ///   </summary>
        ///   <param   name= "pToEncrypt "> 加密内容 </param>
        ///   <returns> </returns>
        private   string   encrypt1(string   pToEncrypt)
        {
                string   EncryptString   =   " ";
                try
                {
                        DESCryptoServiceProvider   des   =   new   DESCryptoServiceProvider();
                        byte[]   inputByteArray   =   Encoding.Default.GetBytes(pToEncrypt);

                        des.Key   =   ASCIIEncoding.ASCII.GetBytes(secretKey1);
                        des.IV   =   ASCIIEncoding.ASCII.GetBytes(secretKey1);
                        MemoryStream   ms   =   new   MemoryStream();
                        CryptoStream   cs   =   new   CryptoStream(ms,   des.CreateEncryptor(),   CryptoStreamMode.Write);
                        cs.Write(inputByteArray,   0,   inputByteArray.Length);
                        cs.FlushFinalBlock();
                        StringBuilder   ret   =   new   StringBuilder();
                        foreach   (byte   b   in   ms.ToArray())
                        {
                                ret.AppendFormat( "{0:X2} ",   b);


                        }
                        EncryptString   =   encrypt2(ret.ToString());
                }
                catch
                {
                        EncryptString   =   "EncryptFailing ";
                }
                return   EncryptString;
        }

        ///   <summary>
        ///   二次加密
        ///   </summary>
        ///   <param   name= "pToEncrypt "> 加密内容 </param>
        ///   <returns> </returns>
        private   string   encrypt2(string   pToEncrypt)
        {
                string   EncryptString   =   " ";
                try
                {
                        DESCryptoServiceProvider   des   =   new   DESCryptoServiceProvider();
                        byte[]   inputByteArray   =   Encoding.Default.GetBytes(pToEncrypt);
                        des.Key   =   ASCIIEncoding.ASCII.GetBytes(secretKey2);
                        des.IV   =   ASCIIEncoding.ASCII.GetBytes(secretKey2);
                        MemoryStream   ms   =   new   MemoryStream();
                        CryptoStream   cs   =   new   CryptoStream(ms,   des.CreateEncryptor(),   CryptoStreamMode.Write);
                        cs.Write(inputByteArray,   0,   inputByteArray.Length);
                        cs.FlushFinalBlock();
                        StringBuilder   ret   =   new   StringBuilder();
                        foreach   (byte   b   in   ms.ToArray())
                        {
                                ret.AppendFormat( "{0:X2} ",   b);
                        }
                        EncryptString   =   ret.ToString();
                }
                catch


                {
                        EncryptString   =   "EncryptFailing ";
                }
                return   EncryptString;
        }

        ///   <summary>
        ///   一次解密
        ///   </summary>
        ///   <param   name= "pToDecrypt "> 解密内容 </param>
        ///   <returns> </returns>
        private   string   Decrypt1(string   pToDecrypt)
        {
                string   EncryptString   =   " ";
                MemoryStream   ms   =   new   MemoryStream();
                try
                {
                        DESCryptoServiceProvider   des   =   new   DESCryptoServiceProvider();
                        byte[]   inputByteArray   =   new   byte[pToDecrypt.Length   /   2];
                        for   (int   x   =   0;   x   <   pToDecrypt.Length   /   2;   x++)
                        {
                                int   i   =   (Convert.ToInt32(pToDecrypt.Substring(x   *   2,   2),   16));
                                inputByteArray[x]   =   (byte)i;
                        }
                        des.Key   =   ASCIIEncoding.ASCII.GetBytes(secretKey2);
                        des.IV   =   ASCIIEncoding.ASCII.GetBytes(secretKey2);
                        CryptoStream   cs   =   new   CryptoStream(ms,   des.CreateDecryptor(),   CryptoStreamMode.Write);
                        cs.Write(inputByteArray,   0,   inputByteArray.Length);
                        cs.FlushFinalBlock();
                        StringBuilder   ret   =   new   StringBuilder();
                        EncryptString   =   Decrypt2(System.Text.Encoding.Default.GetString(ms.ToArray()));
                }
                catch
                {


                        EncryptString   =   "EncryptFailing ";
                }
                return   EncryptString;
        }

        ///   <summary>
        ///   二次解密
        ///   </summary>
        ///   <param   name= "pToDecrypt "> 解密内容 </param>
        ///   <returns> </returns>
        private   string   Decrypt2(string   pToDecrypt)
        {
                string   EncryptString   =   " ";
                MemoryStream   ms   =   new   MemoryStream();
                try
                {
                        DESCryptoServiceProvider   des   =   new   DESCryptoServiceProvider();
                        byte[]   inputByteArray   =   new   byte[pToDecrypt.Length   /   2];
                        for   (int   x   =   0;   x   <   pToDecrypt.Length   /   2;   x++)
                        {
                                int   i   =   (Convert.ToInt32(pToDecrypt.Substring(x   *   2,   2),   16));
                                inputByteArray[x]   =   (byte)i;
                        }
                        des.Key   =   ASCIIEncoding.ASCII.GetBytes(secretKey1);
                        des.IV   =   ASCIIEncoding.ASCII.GetBytes(secretKey1);
                        CryptoStream   cs   =   new   CryptoStream(ms,   des.CreateDecryptor(),   CryptoStreamMode.Write);
                        cs.Write(inputByteArray,   0,   inputByteArray.Length);
                        cs.FlushFinalBlock();
                        StringBuilder   ret   =   new   StringBuilder();
                        EncryptString   =   System.Text.Encoding.Default.GetString(ms.ToArray());
                }
                catch
                {
                        EncryptString   =   "EncryptFailing ";


                }
                return   EncryptString;
        }  
}


//问题
des.Key   =   ASCIIEncoding.ASCII.GetBytes(secretKey1);
                        des.IV   =   ASCIIEncoding.ASCII.GetBytes(secretKey1);
这两句执行就出错,请问是什么原因?


[解决办法]
key 太短
string secretKey1 = "aaaaaaaa ";

*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)

最新版本:20070130

http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
[解决办法]
http://blog.csdn.net/jxufewbt/archive/2006/05/26/756379.aspx

热点排行