作为编程练习,我需要解密消息。我唯一的线索似乎是:
- 编码消息仅包含 Base64 字符
- 一个字母序列(n 在 1,4,7,10 中)乘以它返回带有“==”的加密消息。
- 一个字母序列(n 在 2、5、8、11 中)乘以它返回带有“=”的加密消息。
- 字母序列(3、6、9、12 中的 n)返回不带特定字符的加密消息。
我不想要一个解决方案,我只是想知道等号的这一系列出现是否提供了线索。
作为编程练习,我需要解密消息。我唯一的线索似乎是:
我不想要一个解决方案,我只是想知道等号的这一系列出现是否提供了线索。
= 符号与在Base64中编码的字符串的长度有关。本质上,在可能是最常见的 Base64 形式中,= 用作填充字符以确保可以正确解码最后一个块。
Base64 不是加密——其中没有隐藏——但通常用于允许以纯文本形式发送二进制数据。Base64 中使用的所有字符都将正确粘贴,并且可以使用键盘输入,除了 shift 之外没有修饰键。
如上所述,Base64 不是加密,而是编码。正如您在指定标准的RFC中看到的那样,base64 的工作方式如下。
现在,您有可能到达流的末尾并且没有 24 位组(s mod 6 != 0)。如果发生这种情况,则在输入的末尾添加零,直到获得整数个 6 位组。
鉴于您的输入流是 ASCII 编码的,因此它由 8 位字符组成,因此只有两种情况最终会出现上述情况。
最后一组有 8 位
最后一组有 16 位
在第一种情况下,添加 4 个零(给您 12 位),输出将是基于字母编码的两个字符(2 * 6 位 = 12 位)和两个“=”填充字符
在第二种情况下,将添加 2 个零(总共 18 位),输出将是三个字符(3 * 6 位 = 18 位)和一个“=”填充字符。
这就是有时在编码文本的末尾会出现一个、两个或没有“=”的方式。有关更多信息,您应该真正阅读定义该标准的RFC以及与之相关的维基百科条目。
还有其他几种使用该=
符号的编码系统包括:
ESAB46(BASE64 向后)
ATOM128
梅根35
FERON74
如前所述,=
填充/缓冲区告诉非编码器长度。这尤其是为什么密码学家正在寻找一种更好的缓冲方法,因为这=
是一个死的赠品。