Convert.FromBase64String的时候对于有些字符串会出错

nihao955 2008-09-01 08:54:42
一个字符窜testStr,我先用.net提供的加密类用“DES”算法给它加密,然后用Convert.ToBase64String转换后发送出去。
在接受方想用Convert.FromBase64String转换为byte[],然后用相同算法解密。

但是用Convert.FromBase64String的时候对于有些字符串会出错,报告“System.FormatException: Base-64 字符数组的无效长度。”的异常,为什么?
...全文
1677 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lextm 2008-09-01
  • 打赏
  • 举报
回复
首先应该尝试比较发出和接收到的byte[]是不是一样。很多时候接收那边会不一致(例如结尾多了一些空白)。然后你再来质疑Base64解码错误吧。
nihao955 2008-09-01
  • 打赏
  • 举报
回复
这是我的加密方法?
该如何改呢?

public class EncryptText
{

private static byte[] IV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
/// <summary>
/// 加密方法
/// </summary>
/// <param name="ClearText">明文</param>
/// <param name="Key">加密的KEY</param>
/// <returns>加密的密文</returns>

public string EText(string ClearText, string Key)
{
byte[] rgbKey = Encoding.Default.GetBytes(Key.Substring(0, 8));
byte[] rgbIV = IV;
byte[] clearTextArray = Encoding.UTF8.GetBytes(ClearText);
try
{
DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cStream.Write(clearTextArray, 0, clearTextArray.Length);
cStream.FlushFinalBlock();
return Convert.ToBase64String(mStream.ToArray());
}
catch
{
return "null";
}
}

}

多多谢指教!
whoami333 2008-09-01
  • 打赏
  • 举报
回复
不要看显示出来的,看看末尾不能打印出来的字符。
greystar 2008-09-01
  • 打赏
  • 举报
回复
说明加解密有问题
greystar 2008-09-01
  • 打赏
  • 举报
回复
不符合他的标准当然会出错了.
nihao955 2008-09-01
  • 打赏
  • 举报
回复
字符串内容是这样的:
hZU3Rj7rmdnUGVCBEKTSPpfvfaKoZBiVScdZyT2fUYY=7wlXZ2N9wrX4bhLzRrjOFs6K9lSEE1jjiZ4yiyRVw6I=

是不是有问题?
cftea 2008-09-01
  • 打赏
  • 举报
回复
绝对是由于漏发了,或多发了,或漏取了,或多取了。
不信你试:Convert.FromBase64String(Convert.ToBase64String(...)),行得通。
whoami333 2008-09-01
  • 打赏
  • 举报
回复
你检查一下看看是不是字符串末尾多了什么字符。
whoami333 2008-09-01
  • 打赏
  • 举报
回复
不能return "null";
VS C#2013 DES加密解密完整源代码 测试平台 visual studio 2013 win8.1 依据网上资源整理,并亲测,并写出窗口供调用演示,原代码全部打包奉上,可供学习使用。 public static string EncryptDES(string encryptString, string encryptKey) { try { byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8)); byte[] rgbIV = Keys; byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString); 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 encryptString; } } // // DES解密字符串 // // 待解密的字符串 // 解密密钥,要求为8位,和加密密钥相同 // 解密成功返回解密后的字符串,失败返源串 public static string DecryptDES(string decryptString, string decryptKey) { try { byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey); byte[] rgbIV = Keys; byte[] inputByteArray = Convert.FromBase64String(decryptString); 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());

110,533

社区成员

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

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

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