0

最近,我一直在研究加密/解密和有关 base64 编码的东西。我遇到过一些情况,其中一些 url 有一些以 base64 编码的加密部分,我对此有一些疑问:

  1. 我遇到的一些 url 有一些 base64 看起来应该是无效的,但显然不是。例如,查看以下网址:

https://www.youtube.com/watch?v=-LvuvUzcdyI

现在很明显,请求参数(-LvuvUzcdyI)是被编码和/或加密的部分。现在,有两点需要注意:

首先,该请求参数中只有 11 个字符,而 base 64 编码的字符数应该是 4 的倍数。现在,我可以将这个作为 url 传递,只需省略填充字符即可存在于原始基数 64 中。如果存在适当的填充字符,则编码中将有 12 个字符,这是有道理的。

然而,真正让我困惑的是这个编码的第一个字符是'-'。我知道 url 经常替换字符 '+'、'/' 和 '=' 以使编码 url 友好。因此,上面编码中的“-”可能是“+”或“/”的替代品。但是,我进行了一些计算,并推断出在 base 64 编码中,“+”或“/”甚至不可能作为任何 4 个字符集中的任何第一个、第二个或第三个字符出现. 换句话说,每当一组 3 个纯文本字符被编码为 base 64 时,在生成的 4 个字符中,只有第 4 个字符应该能够是“+”或“/”。原因如下:

base 64 编码中的每个字符代表 6 位。'+' 的 base 64 索引是 62,可以用 111110 表示为 6 位。'/' 的索引是 63,可以用 111111 表示。现在,一组 4 个 base 64 字符中的第一个使用第一个第一个明文 ascii 字符的 6 位。因此,为了使第一个 64 进制字符为“+”或“/”,第一个明文字符的前 6 位必须是 111110 或 111111,这意味着原始组中的第一个明文字符3 个纯文本字符的十进制 (ascii) 值必须远远超过 128。事实上,十进制值必须在 249 和 255 之间。

对于第 2 个 base 64 字符(共 4 个)为“+”或“/”,第一个明文字符的最后 2 位,然后是第二个明文字符的第 4 位必须是 111110 或 111111。这会产生同样的问题;第二个纯文本 ascii 字符的十进制值必须远大于 128。

对于第 3 个 base64 字符为“+”或“/”,第 2 个明文字符的最后 4 位后跟第 3 个(也是最后一个)明文字符的第 1 2 位必须是适当的位。这当然会导致第三个纯文本字符必须超过 128。

在任何可能是“+”或“/”的 4 个基 64 字符组中,唯一的基 64 字符将是第 4 个字符,因为这只需要求第 3 个 ascii 字符的最后 6 位是适当的位(这意味着如果第三个 ascii 字符的十进制值只是 62 或 63 就可以了,它们对应于 '>' 和 '?')。

然而,我们看到这里编码中的第一个字符是“-”(很可能替换了“+”)。

怎么会这样?

解码的 ascii 字符是否可以是十进制值超过 128 的字符?也许明文不介意其字符之一是下一页上看到的扩展 ascii 字符之一:

http://www.asciitable.com/

或者,也许该编码根本不是base 64,而是其他一些编码?

有人对此有任何想法吗?ascii 字符之一是否更有可能成为扩展 ascii 字符之一,或者这只是不是 base 64?

4

0 回答 0