在base64编码中填充的目的是什么.以下是维基百科的摘录:
"分配了一个额外的填充字符,可用于强制编码输出为4个字符的整数倍(或等效于未编码的二进制文本不是3个字节的倍数);这些填充字符必须在解码时丢弃,但仍然允许计算未编码文本的有效长度,当其输入二进制长度不是3个字节的倍数时(最后一个非填充字符通常被编码,使得它代表的最后一个6位块将为零在其最低有效位上填充,在编码流的末尾最多可能出现两个填充字符."
我写了一个程序,它可以base64编码任何字符串并解码任何base64编码的字符串.填充解决了什么问题?
我移植一个项目的目标net472来netstandard.System.Web我坚持的最后一个依赖是HttpServerUtility.UrlTokenEncode(Byte[]).
我发现Microsoft.AspNetCore.WebUtilities,包含Base64UrlTextEncoder和WebEncoders,但是它们与UrlTokenEncode/ 不可互换Decode,因为它追加/期望最后的=填充字符数,例如:
var data = Encoding.UTF8.GetBytes("SO");
Convert.ToBase64String(data); // U08=
HttpServerUtility.UrlTokenEncode(data); // U081 - this is what's expected and
// the only thing UrlTokenDecode can handle
Base64UrlTextEncoder.Encode(data); // U08
WebEncoders.Base64UrlEncode(data); // U08
Run Code Online (Sandbox Code Playgroud)
据我所知,没有其他差异(我用随机字符串运行测试),但它也引入了一些其他依赖项(Microsoft.Net.Http.Headers和Microsoft.Extensions.Primitives),我不知道真的需要在那个项目中.
是否有任何nuget包装与直接替换?我想自己实现这个,如果没有.
在BigQuery中,我将md5函数用作:
select md5('<<some string>>') as hashed
Run Code Online (Sandbox Code Playgroud)
总是在字母的最后返回“ ==”,例如:
R7zlx09Yn0hn29V+nKn4CA==
Run Code Online (Sandbox Code Playgroud)
为什么总是带有“ ==”?