Base-64 char数组的长度无效

时间:2011-02-01 19:44:41

标签: c# base64

我收到“Base-64 char数组的长度无效”。 IF(){...}内部是我试图让它工作的变种。它没有在第一行中失败而没有调用decrypt(...)证明它不是函数问题。我在第一次解密(...)调用时遇到了同样的错误。使用encoding.ascii的最后一个...将让我进入函数内部,但随后它在函数内部失败。我从数据库中获取正确的加密信息到字符串SSnum。它的值是:4 + mFeTp3tPF

try
{
    string SSnum = dr.GetString(dr.GetOrdinal("Social Security"));
    if (isEncrypted)
    {
      byte[] temp = Convert.FromBase64String(SSnum);
      //SSnum = decrypt(Convert.FromBase64String(SSnum), Key, IV);
      //SSnum = decrypt(Encoding.ASCII.GetBytes(SSnum), Key, IV);
    }
    txt_Social_Security.Text = SSnum;
}
catch { txt_Social_Security.Text = ""; }

我被告知使用Convert.FromBase64String()而不是ASCII方法......所以为什么它失败了,我该如何解决?

5 个答案:

答案 0 :(得分:18)

Base64数据长度应为4的倍数,并使用padding char'=' 您可以将数据更改为有效的base64数据。

string dummyData = imgData.Trim().Replace(" ", "+");
if (dummyData.Length % 4 > 0)
dummyData = dummyData.PadRight(dummyData.Length + 4 - dummyData.Length % 4, '=');
byte[] byteArray = Convert.FromBase64String(dummyData); 

https://stackoverflow.com/a/9301545/2024022

这会帮助你,尝试一次。 谢谢 suribabu。

答案 1 :(得分:13)

  

它的值是:4 + mFeTp3tPF

您收到此错误,因为该值4+mFeTp3tPF实际上有效Base64。

您是否可能只是缺少必需的填充字符,如4+mFeTp3tPF=

答案 2 :(得分:1)

您确定自己拥有Base64字符串吗? Base64是一种将二进制数据编码为字符串的方法,只使用标准的7位ASCII字符。 是一个像ASCII一样编码的字符串,并且存在一些控制字节。如果您使用Convert.ToBase64String来获取值,那么您有一个Base64字符串(如果您尝试将二进制数据存储为字符串,那么这是最好的选择)

根据您的错误(以及您的示例数据)判断,我假设你有一个Base64字符串。如果需要在数据库中存储二进制数据,可以使用二进制类型创建列,也可以使用Convert.ToBase64String将字符串编码为Base64。

byte[] inputData = ...;

string base64String = Convert.ToBase64String(inputData);

byte[] outputData = Convert.FromBase64String(base64String);

此处,outputData应包含与inputData相同的数据。

如果您拥有的只是一个ASCII编码的字符串,那么您使用System.Text.Encoding.ASCII.GetBytes()的原始做法是正确的,但如果可以的话,您应该将其更改为使用Base64字符串。

答案 3 :(得分:0)

你确定字符串 4 + mFeTp3tPF 是格式正确的Base64字符串吗? 我尝试了一些在线服务 - 没有人可以转换它。

答案 4 :(得分:-1)

替换

  

byte [] temp = Convert.FromBase64String(SSnum);

到这个

  

var temp = UTF8Encoding.UTF8.GetBytes(SSnum);