【问题标题】:How about Decode Base64 Algorithm解码Base64算法怎么样
【发布时间】:2014-03-20 06:45:09
【问题描述】:

谁知道Base64解码算法,网上很多文章、期刊和书籍都解释了如何编码base64算法但是解码Base64没有解释。所以我的问题是如何解码Base4算法?

谢谢, 希望你的回答

【问题讨论】:

    标签: cryptography base64 decode


    【解决方案1】:

    基本上,您一次取一个字符并将其转换为它所代表的位。因此,如果您找到一个A 字符,它将转换为000000,而/ 字符将转换为111111。然后你连接这些位。所以你得到000000 | 111111。但是,这不适合一个字节,您必须拆分并移动结果以获得 000000111111xxxx 其中 xxxx 尚不知道

    当然,您可能只能在高性能实现中使用字节来执行此操作,因此每个字符都有两个虚假位(由空格与实际表示某事的位分隔)。

    ((00 000000 << 2) & 11111100) | ((00 111111 >> 4) & 00000011) -> 00000011
    ((00 111111 << 4) & 11110000) | ???????? -> 1111xxxx
    ...
    

    首先使用移位运算符&lt;&lt; 将位放置到位。然后使用二元 AND 运算符 &amp; 选出你想要的那些位,然后使用二元 OR | 运算符组合这两个字符的位。

    现在,在 4 个字符之后,您将拥有 3 个完整字节。但是,您的结果可能不是三的倍数。在这种情况下,您可能有两个或三个字符,最后可能后跟填充 (=)。一个字符是不可能的,因为这表明一个只设置了最高位的不完整字节。在这种情况下,您应该简单地忽略由最后一个字符编码的最后一个虚假位。

    我个人喜欢使用状态机进行解码。我已经创建了几个使用 Java 状态机的 base 64 流。仅当您有 4 个字符(3 个完整字节)时才进行解码,直到您处于 base 64 编码的末尾。

    【讨论】:

      【解决方案2】:

      看看这个网站:http://www.base64decode.org他们有一个翻译表

      【讨论】:

      • 不,它唯一的解码翻译表不解码谢谢
      • 但如果我没记错的话,你就搞砸了 :-) 不要忘记最后的填充:en.m.wikipedia.org/wiki/Base64
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多