我收到“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方法......所以为什么它失败了,我该如何解决?
答案 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);