3des加密为何编译出错?

叶子哟 2004-06-22 11:51:03
//利用3des加密源串,密钥为8位
//web应用
const string b64key = "abcdefgh";
public string EncryptData(string b64Key, string content)
{
byte[] tdesIV=new byte[1];
byte[] tdesKey=Convert.FromBase64String(b64Key);
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
tdes.Mode=CipherMode.ECB;
tdes.Padding=PaddingMode.PKCS7;
ICryptoTransform temp=tdes.CreateEncryptor(tdesKey, tdesIV);
ToBase64Transform t64=new ToBase64Transform();
MemoryStream dstream=new MemoryStream();
CryptoStream encStream = new CryptoStream(dstream,t64 , CryptoStreamMode.Write);
CryptoStream enc2=new CryptoStream(dstream,temp,CryptoStreamMode.Write);
Console.WriteLine("Encrypting...");
char[] contentchar=content.ToCharArray();
byte[] contentbyte=new byte[contentchar.GetLength(0)];
for (int i=0;i<contentchar.GetLength(0);i++)
{
contentbyte[i]=(byte)contentchar[i];
}
enc2.Write(contentbyte, 0, contentchar.GetLength(0));
enc2.Close();
byte[] a3= dstream.ToArray();
string a4=Convert.ToBase64String(a3);
return a4;
}

出错提示:
指定键的大小对于此算法无效。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Security.Cryptography.CryptographicException: 指定键的大小对于此算法无效。

源错误:

行 66: tdes.Mode=CipherMode.ECB;
行 67: tdes.Padding=PaddingMode.PKCS7;
行 68: ICryptoTransform temp=tdes.CreateEncryptor(tdesKey, tdesIV);
行 69: ToBase64Transform t64=new ToBase64Transform();
行 70: MemoryStream dstream=new MemoryStream();


源文件: d:\inetpub\wwwroot\websip\bjsgip.aspx.cs 行: 68
...全文
186 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
叶子哟 2004-06-22
  • 打赏
  • 举报
回复
非常感谢,先试试
jiezhi 2004-06-22
  • 打赏
  • 举报
回复
以上代码已经过测试
jiezhi 2004-06-22
  • 打赏
  • 举报
回复
private static byte[] Keys = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};
/// <summary>
/// DES加密字符串
/// </summary>
/// <param name="encryptStr">待加密的字符串</param>
/// <param name="encryptKey">加密密钥,要求为8位</param>
/// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
public static string EncryptDES(string encryptStr,string encryptKey)
{
try
{
byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0,8));
byte[] rgbIV = Keys;
byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptStr);
DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream,dCSP.CreateEncryptor(rgbKey,rgbIV),CryptoStreamMode.Write);
cStream.Write(inputByteArray,0,inputByteArray.Length);
cStream.FlushFinalBlock();
return Convert.ToBase64String(mStream.ToArray());
}
catch
{
return encryptStr;
}
}

/// <summary>
/// DES解密字符串
/// </summary>
/// <param name="decryptStr">待解密的字符串</param>
/// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
/// <returns>解密成功返回解密后的字符串,失败返源串</returns>
public static string DecryptDES(string decryptStr,string decryptKey)
{
try
{
byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
byte[] rgbIV = Keys;
byte[] inputByteArray = Convert.FromBase64String(decryptStr);
DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream,DCSP.CreateDecryptor(rgbKey,rgbIV),CryptoStreamMode.Write);
cStream.Write(inputByteArray,0,inputByteArray.Length);
cStream.FlushFinalBlock();
return Encoding.UTF8.GetString(mStream.ToArray());
}
catch
{
return decryptStr;
}
}

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧