Encoding url安全和文件名安全base64的最佳候选填充字符是什么?

Encoding url安全和文件名安全base64的最佳候选填充字符是什么?,encoding,base64,padding,Encoding,Base64,Padding,官方base64的填充字符为“=”,在URL中使用时,可能需要对其进行百分比编码。我试图找到最好的填充字符,这样我的编码字符串既可以是url安全的,我将使用编码字符串作为参数值,例如id=encodedString和filename safe,我将直接使用编码字符串作为filename 点“.”是一个很受欢迎的候选文件,它是url安全的,但不完全是文件名安全的: “!”这似乎是一个可行的选择,尽管我在谷歌上搜索过,我从未见过有人用它作为填充字符。有什么想法吗?谢谢 更新:我已经在自定义的base

官方base64的填充字符为“=”,在URL中使用时,可能需要对其进行百分比编码。我试图找到最好的填充字符,这样我的编码字符串既可以是url安全的,我将使用编码字符串作为参数值,例如id=encodedString和filename safe,我将直接使用编码字符串作为filename

点“.”是一个很受欢迎的候选文件,它是url安全的,但不完全是文件名安全的:

“!”这似乎是一个可行的选择,尽管我在谷歌上搜索过,我从未见过有人用它作为填充字符。有什么想法吗?谢谢

更新:我已经在自定义的base64编码中将+替换为-减号,并将/替换为uu下划线,因此“-”或“u”不再适用于填充字符。

我将使用“-”或“u” 它们是URL和文件安全的,看起来或多或少像是填充物,我会选择“-”或“-” 它们是URL和文件安全的,看起来或多或少像是填充

URI中的无保留字符是:

"-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"
不过,值得指出的是,微软的文章还说,不要假设区分大小写。也许您应该只使用基数16或32?

URI中的无保留字符是:

"-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"
不过,值得指出的是,微软的文章还说,不要假设区分大小写。也许你应该坚持以16或32为基数

URL变量的修改Base64 存在,其中不包含填充“=” 使用

该条规定:

URL变量的修改Base64 存在,其中不包含填充“=” 使用


上个月,我用电子邮件发送网站解决这个问题的最佳解决方案是根本不使用padding character=

填充字符之所以存在的唯一原因是因为懒惰的解码器。您可以非常轻松地添加missing=->只需在文本上添加%4,然后从4中减去您得到的数字,这就是您需要在字符串末尾添加的=数。下面是C代码:

    var pad = 4 - (text.Length % 4);
    if (pad < 4)
        text = text.PadRight(text.Length + pad, '=');
而且,大多数这样做的人都对用其他URL安全字符替换+和/感兴趣。。。我提议:

取代- /取代_
不要使用。因为它可以在不同的系统/web服务器上产生疯狂的结果,例如在IIS Base64上,编码字符串不能以结尾。或者IIS将搜索文件

我上个月在电子邮件发送网站上解决这个问题的最佳解决方案是根本不使用padding character=

填充字符之所以存在的唯一原因是因为懒惰的解码器。您可以非常轻松地添加missing=->只需在文本上添加%4,然后从4中减去您得到的数字,这就是您需要在字符串末尾添加的=数。下面是C代码:

    var pad = 4 - (text.Length % 4);
    if (pad < 4)
        text = text.PadRight(text.Length + pad, '=');
而且,大多数这样做的人都对用其他URL安全字符替换+和/感兴趣。。。我提议:

取代- /取代_
不要使用。因为它可以在不同的系统/web服务器上产生疯狂的结果,例如在IIS Base64上,编码字符串不能以结尾。或者IIS将搜索我将避免的文件

。~*'对于文件名,谢谢,迈尔斯,看起来像“!”适用于url和文件名。也许我会选择带“!”的base32作为填充字符。我会避免。~*'对于文件名,谢谢,迈尔斯,看起来像“!”适用于url和文件名。也许我会选择带“!”的base32作为填充字符。对不起,我应该提到这一点:我在自定义base64编码中已将+替换为-减号,并将/替换为下划线,因此“-”或不再适用于填充字符。对不起,我应该提到这一点:我已将自定义base64编码中的+替换为-减号,将/替换为下划线,因此“-”或不再适用于填充字符。不完全正确,填充的结果不能被4整除。需要附加“=”字符的4个焊盘编号,而不是焊盘编号。否则这个解决方案很好。@YoungBob我已经编辑了答案,若你们能提出更好的代码,请编辑它。谢谢不太正确,填充的结果不能被4整除。需要附加“=”字符的4个焊盘编号,而不是焊盘编号。否则这个解决方案很好。@YoungBob我已经编辑了答案,若你们能提出更好的代码,请编辑它。谢谢