读书人

des加密有关问题

发布时间: 2012-01-18 00:23:26 作者: rapoo

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

读书人网 >C#

热点推荐