zoukankan      html  css  js  c++  java
  • Base64加密解密原理以及代码实现

        1. Base64使用A--Z,a--z,0--9,+,/ 这64个字符.
        2. 编码原理:将3个字节转换成4个字节( (3 X 8) = 24 = (4 X 6) )先读入3个字节,每读一个字节,左移8位,再右移四次,每次6位,这样就有4个字节了.
        3. 解码原理:将4个字节转换成3个字节.先读入4个6位(用或运算),每次左移6位,再右移3次,每次8位.这样就还原了.

        Base64是一种非经常见的编码规范,其作用是将二进制序列转换为人类可读的ASCII字符序列,经常使用在需用通过文本协议(比方HTTP和SMTP)来传输二进制数据的情况下。Base64并非一种用于安全领域的加密解密算法(这类算法有DES等),虽然我们有时也听到使用Base64来加密解密的说法,但这里所说的加密与解密实际是指编码(encode)和解码(decode)的过程,其变换是非常easy的,只可以避免信息被直接识别。

       

        Base64採用了一种非常easy的编码转换:对于待编码数据,以3个字节为单位,依次取6位数据并在前面补上两个0形成新的8位编码,因为3*8=4*6,这样3个字节的输入会变成4个字节的输出,长度上添加�了1/3。

    上面的处理还不能保证得到的字符都是可见字符,为了达到此目的,Base64制定了一个编码表,进行统一的转换。码表的大小为2^6=64,这也是Base64名称的由来。

                                Base64编码表

          Value Encoding  Value Encoding  Value Encoding  Value Encoding
               0 A            17 R            34 i            51 z
               1 B            18 S            35 j            52 0
               2 C            19 T            36 k            53 1
               3 D            20 U            37 l            54 2
               4 E            21 V            38 m           55 3
               5 F            22 W           39 n           56 4
               6 G            23 X            40 o            57 5
               7 H            24 Y             41 p            58 6
               8 I            25 Z             42 q            59 7
               9 J            26 a             43 r             60 8
              10 K            27 b            44 s            61 9
              11 L            28 c            45 t             62 +
              12 M            29 d           46 u            63 /
              13 N            30 e           47 v
              14 O            31 f            48 w         (pad) =
              15 P            32 g           49 x
              16 Q            33 h           50 y
             

        Base64编解码算法都非常easy,网上有非常多源代码,这里就不介绍了。

        另外另一点要注意的地方,前面提到编码是以3个字节为单位,当剩下的字符数量不足3个字节时,则应使用0进行填充,对应的,输出字符则使用'='占位,因此编码后输出的文本末尾可能会出现1至2个'='。

    这是一种典型的编码转换的处理方法,相似的可能还有UTF16与UTF8之间的转换。 

  • 相关阅读:
    leetcode58. 最后一个单词的长度 🌟
    leetcode53. 最大子序和 🌟
    leetcode38. 报数 🌟
    leetcode35. 搜索插入位置 🌟
    leetcode28. 实现strStr() 🌟
    ⚠️ Python 循环列表删除元素的注意事项
    leetcode27. 移除元素 🌟
    leetcode26. 删除排序数组中的重复项 🌟
    javascript 高阶函数 currying & uncurrying
    javascript 高阶函数 实现 AOP 面向切面编程 Aspect Oriented Programming
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4084927.html
Copyright © 2011-2022 走看看