C#解密方法问题,请教?

云中雁荡山 2010-09-03 09:42:40

/// <summary>
/// DES解密字符串
/// </summary>
/// <param name="decryptString">待解密的字符串</param>
/// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
/// <returns>解密成功返回解密后的字符串,失败返源串</returns>
public static string Decrypt(string cryptedString, string decryptKey)
{
byte[] bytes = ASCIIEncoding.ASCII.GetBytes(decryptKey);
string s1 = string.Empty;
if (String.IsNullOrEmpty(cryptedString))
{
throw new ArgumentNullException("The string which needs to be decrypted can not be null.");
}

DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
cryptoProvider.Mode = CipherMode.ECB;
cryptoProvider.Padding = PaddingMode.Zeros;

// 通过Base64解密出16进制
s1 = Encoding.Default.GetString(Convert.FromBase64String(cryptedString));

// 16进制数据在转成字符串
//cryptedString = DivideString(s1,2);

// 16进制数据转BYTE
Byte[] bBuffer = Hex2ByteArr(s1);

// 开始解密
MemoryStream memoryStream = new MemoryStream(bBuffer);
CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoProvider.CreateDecryptor(bytes, bytes), CryptoStreamMode.Read);
StreamReader reader = new StreamReader(cryptoStream);

return reader.ReadToEnd();
}



以上代码解密的时候容易出错。
执行到以下代码的时候就报错。
// 通过Base64解密出16进制
s1 = Encoding.Default.GetString(Convert.FromBase64String(cryptedString));
报错错误是:Base-64 字符串中的无效字符。

请高手指教。多谢!
...全文
136 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
http://www.google.com.hk/search?q=base64%E7%BC%96%E7%A0%81&rls=com.microsoft:zh-cn:IE-SearchBox&ie=UTF-8&oe=UTF-8&sourceid=ie7&hl=zh-CN

自己看吧。如果只是你的字符串不符合base64编码的问题,这种问题不值得在csdn上来问。自己用点精力学才能真懂。
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zeewendotnet 的回复:]
你看看你这串base64编码字符串有没有问题。邮件的base64内容是以"base64"开头,“----”结尾(具体忘记是什么多,记得是好多个减号)。从“报错错误是:Base-64 字符串中的无效字符。”来看,应该是base64字符串本身有问题,我同事以前也遇到这样的问题,原来是尾部没有去掉结束字符串(也就是很多减号那串)。
[/Quote]
base64中没有减号这个符号。
hhd007 2010-09-04
  • 打赏
  • 举报
回复
看来没高手啊
Peter200694013 2010-09-04
  • 打赏
  • 举报
回复
q107770540 2010-09-04
  • 打赏
  • 举报
回复

/// <summary>
/// 进行DES加密。
/// </summary>
/// <param name="pToEncrypt">要加密的字符串。</param>
/// <param name="sKey">密钥,且必须为8位。</param>
/// <returns>以Base64格式返回的加密字符串。</returns>
public string Encrypt(string pToEncrypt, string sKey)
{
using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
{
byte[] inputByteArray = Encoding.UTF8.GetBytes(pToEncrypt);
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
cs.Close();
}
string str = Convert.ToBase64String(ms.ToArray());
ms.Close();
return str;
}
}

/// <summary>
/// 进行DES解密。
/// </summary>
/// <param name="pToDecrypt">要解密的以Base64</param>
/// <param name="sKey">密钥,且必须为8位。</param>
/// <returns>已解密的字符串。</returns>
public string Decrypt(string pToDecrypt, string sKey)
{
byte[] inputByteArray = Convert.FromBase64String(pToDecrypt);
using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
{
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
{
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
cs.Close();
}
string str = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
return str;
}
}
wyman25 2010-09-04
  • 打赏
  • 举报
回复
你看看你这串base64编码字符串有没有问题。邮件的base64内容是以"base64"开头,“----”结尾(具体忘记是什么多,记得是好多个减号)。从“报错错误是:Base-64 字符串中的无效字符。”来看,应该是base64字符串本身有问题,我同事以前也遇到这样的问题,原来是尾部没有去掉结束字符串(也就是很多减号那串)。
云中雁荡山 2010-09-03
  • 打赏
  • 举报
回复
就是检查不出是哪出了问题才过来问的。求高手指教。
raykenio 2010-09-03
  • 打赏
  • 举报
回复
好简单吗,检查出现无效字符的地方,看看是不是错误的,是不是密文不对,是不是转换中加入了错误信息,截断不对,之类的。或者结尾不对,去仔细研究一下Base-64的规则。就知道了

62,244

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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