【发布时间】:2014-03-20 06:45:09
【问题描述】:
谁知道Base64解码算法,网上很多文章、期刊和书籍都解释了如何编码base64算法但是解码Base64没有解释。所以我的问题是如何解码Base4算法?
谢谢, 希望你的回答
【问题讨论】:
标签: cryptography base64 decode
谁知道Base64解码算法,网上很多文章、期刊和书籍都解释了如何编码base64算法但是解码Base64没有解释。所以我的问题是如何解码Base4算法?
谢谢, 希望你的回答
【问题讨论】:
标签: cryptography base64 decode
基本上,您一次取一个字符并将其转换为它所代表的位。因此,如果您找到一个A 字符,它将转换为000000,而/ 字符将转换为111111。然后你连接这些位。所以你得到000000 | 111111。但是,这不适合一个字节,您必须拆分并移动结果以获得 00000011 和 1111xxxx 其中 xxxx 尚不知道
当然,您可能只能在高性能实现中使用字节来执行此操作,因此每个字符都有两个虚假位(由空格与实际表示某事的位分隔)。
((00 000000 << 2) & 11111100) | ((00 111111 >> 4) & 00000011) -> 00000011
((00 111111 << 4) & 11110000) | ???????? -> 1111xxxx
...
首先使用移位运算符<< 将位放置到位。然后使用二元 AND 运算符 & 选出你想要的那些位,然后使用二元 OR | 运算符组合这两个字符的位。
现在,在 4 个字符之后,您将拥有 3 个完整字节。但是,您的结果可能不是三的倍数。在这种情况下,您可能有两个或三个字符,最后可能后跟填充 (=)。一个字符是不可能的,因为这表明一个只设置了最高位的不完整字节。在这种情况下,您应该简单地忽略由最后一个字符编码的最后一个虚假位。
我个人喜欢使用状态机进行解码。我已经创建了几个使用 Java 状态机的 base 64 流。仅当您有 4 个字符(3 个完整字节)时才进行解码,直到您处于 base 64 编码的末尾。
【讨论】:
看看这个网站:http://www.base64decode.org他们有一个翻译表
【讨论】: