Base-64 字符数组或字符串的长度无效

  最近遇到的问题,报Base-64 字符数组或字符串的长度无效,代码在本地环境测试是没问题的,可以正常解析出来,但部署到服务器上就是有这个问题,对比了请求的入参都一样,最后在网上搜了下解决方案,记录下来,以便以后查看。

 

代码:

public string DecodeBase64Str(string content)
 {
       var encryptedContent = content.Trim().Replace(" ", "+");

        var bytes = Convert.FromBase64String(encryptedContent);

        return Encoding.UTF8.GetString(bytes);
  }

 

针对base64加密的特性改进后代码:

public string DecodeBase64Str(string content)
{
       var encryptedContent = content.Trim().Replace("%", "").Replace(",", "").Replace(" ", "+");

       //base字符串必须被4整除,不足的在末尾填充'='号
       if (encryptedContent.Length % 4 > 0)
       {
           encryptedContent = encryptedContent.PadRight(encryptedContent.Length + 4 - encryptedContent.Length % 4, '=');
       }

       var bytes = Convert.FromBase64String(encryptedContent);

       return Encoding.UTF8.GetString(bytes);
}

 

 Base64编码的知识补充:

   Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。如果剩下的字符不足3个字节,则用0填充,输出字符使用'=',因此编码后输出的文本末尾可能会出现1或2个'='。

 例如: 

  转换前 10101101,10111010,01110110
 
  转换后 00101011, 00011011 ,00101001 ,00110110
 
  十进制 43 27 41 54
 
  对应码表中的值 r b p 2
 
  所以上面的24位编码,编码后的Base64值为 rbp2
 
  解码同理,把 rbq2 的二进制位连接上再重组得到三个8位值,得出原码。
 

 

 

posted @ 2021-01-07 14:28  登峰渺观  阅读(2787)  评论(0)    收藏  举报