Bck*_*ktr 1 base64 cryptography decode
任何人都知道如何 Base64 解码算法,因为互联网上的许多文章、期刊和书籍都解释了如何对 base64 算法进行编码,但是没有解释 Base64 的解码。所以我的问题是如何解码 Base4 算法?
谢谢,希望你的回答
基本上,您一次取一个字符并将其转换为它所代表的位。所以,如果你找到一个A字符,将转换成000000与/字符转换成111111。然后连接这些位。所以你得到000000 | 111111. 但是,这不适合一个字节,您必须拆分并移动结果以获取00000011并且尚不知道1111xxxx在哪里xxxx
当然,您可能只能在高性能实现中使用字节来执行此操作,因此每个字符都有两个伪位(由空格与实际含义的位分隔)。
((00 000000 << 2) & 11111100) | ((00 111111 >> 4) & 00000011) -> 00000011
((00 111111 << 4) & 11110000) | ???????? -> 1111xxxx
...
Run Code Online (Sandbox Code Playgroud)
首先使用移位运算符<<将位放置到位。然后使用二元 AND 运算符&挑选出你想要的那些位,然后使用二元 OR|运算符将两个字符的位组合起来。
现在,在 4 个字符之后,您将拥有 3 个完整字节。然而,您的结果可能不是三的倍数。在这种情况下,您可能有两个或三个字符,最后可能跟有填充 ( =)。一个字符是不可能的,因为这表明只有最高位设置的不完整字节。在这种情况下,您应该简单地忽略由最后一个字符编码的最后一个伪位。
我个人喜欢使用状态机来进行解码。我已经创建了几个使用 Java 状态机的 base 64 流。仅当您有 4 个字符(3 个完整字节)时才解码可能很有用,直到您处于 base 64 编码的末尾。