假设我有这个方法。
private static void Example(string data)
{
Console.WriteLine("Initial : {0}", data);
data = data.PadRight(data.Length + 1, '0');
Console.WriteLine("Step 1 : {0}", data);
data = data.PadRight(data.Length + 4 - data.Length % 4, '=');
Console.WriteLine("Step 2 : {0}", data);
byte[] byteArray = Convert.FromBase64String(data);
string newData = Convert.ToBase64String(byteArray);
Console.WriteLine("Step 3 : {0}", newData);
}
我希望输出字符串“1”的输出如下
Initial : 1
Step 1 : 10
Step 2 : 10==
Step 3 : 10==
相反,输出就是这个。
Initial : 1
Step 1 : 10
Step 2 : 10==
Step 3 : 1w==
我不知道为什么。我希望输出与输入相同,但事实并非如此。 我试过替换
data = data.PadRight(data.Length + 1, '0');
与
data = data + "0";
它也会出现更长的输入字符串,例如长度为5或9的字符串。如果我添加“=”但是我超过我的填充限制Convert.FromBase64String()
所以我的问题是真的发生了什么,我怎样才能获得预期的输出? 什么是 我做错了 ?
编辑:对于那些为什么我使用bas64感到困惑的人,它与此PHP decrypting data with RSA Private Key
有关答案 0 :(得分:3)
基本上,没有字节数组可以编码到10==
。
如果base64字符串以==
结尾,则表示最后4个字符仅表示单个字节。因此,只有第一个字符和第二个字符的前2位是相关的。查看Wikipedia表,10
表示以下值:
'1' = 53 '0' = 52
110101 110100
因此,编码1101 0111
的字节,然后忽略最后的四位(0100
)。当您重新编码数据时,它会使用0代替最后的四位,给出:
'1' = 53 'w' = 48
110101 110000
从根本上说,它并不清楚你要做的是什么 - 但如果你的输入是base64编码值的 part ,那就太奇怪了。代码表现得像我期望的那样 - 它只是有用的代码......