zoukankan      html  css  js  c++  java
  • base64编码

    Base64编码解码原理详解

    1. Base64字符的组成部分

    Base64所用字符: 0,1,2 ….9 A,B,C,D…Z a,b,c,d…z + /
    对应ASCII: 48,49…58,65,66…90,97,98…122, 43,47

    2. 10个数字,26个大写字母,26个小写字母,1个+,一个 / 刚好64个字符

    3. Base64是将每3个字符转化为4个字符,即(3*8bit=4*6bit),如果文本结尾不足3个字符,对转化为6为字符后,后面剩余的二进制位可能是2位或者4位(因为是N%6),余数为0时代表整除了,在剩余二进制位后面补0至6个二进制位,再在结尾加=号,使编码后的字符满足(N*8+等号个数)/6=base64的字符个数,说白了,如果N*8%6后余2个二进制位,就补2个=,余4个二进制位就补一个=,整除不补=。

    4. Base64编码对应的字符表

    5. 对字符个数是3的倍数(N*8%6=0)的字符串进行Base64编码

    原文:         p           h         p
    
    对应ASCII: 01110000   01101000  01110000
    
    每6位分割:  011100  000110  100001 110000  |
    
    对应10进制值:  28      6       33     48
    
    Base64对应的字符:c     G        h      w
    
    最后php=cGhw(base64)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    6. 对字符个数为N*8%6=2的字符串进行base64编码

    原文:        r        a         n       l 
    
    ASCII值:01110010 01100001 01101110 01101100
    
    每6位分割:011100  100110 000101 101110 | 011011  00 0000  xxxxxx  xxxxxx |
    
    对应10进制值:28      38    5       46    27       0         =       =
    对应base64字符: c    m     F       u     b       A          =       = 
    
    结果: ranl=cmFubA==(base64)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    7. 对字符个数为N*8%6=4的字符串进行base64编码

    原文           h          a         c         k          e
    
    ASCII值:    01101000  01100001  01100011  01101011   01100101
    
    每6位分割:  011010  000110  000101  100011 | 011010  110110  0101 00    xxxxxx |
    
    对应10进制值: 26       6      5       35      26      54       20         =
    
    对应base64字符: a      G      F        j       a       2        U         =
    
    结果 hacke=aGFja2U=(base64)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    8. Base64对于中文的不同编码可能会出现不同的结果,具体要看中文用的是什么编码。

    9. 总结,看懂了base64的编码过程,当前解码的过程也就明白了,在这儿我就不多讲了,后面有时间再发布base64的编码和解码的源代码。

  • 相关阅读:
    Android 图片文字单位 px、dp、sp区别
    替换Fragment 报错 The specified child already has a parent. You must call removeView() on the child's parent first.
    Android 程序怎么打log
    Android 启动项 Activity
    Actiivity 生命周期
    Oracle 监听/数据库 启动/关闭
    【HDU-2049】不容易系列之(4)——考新郎
    Linux内存子系统——Locking Pages(内存锁定)
    command三国杀开发日记20200915
    command三国杀开发日记20200914
  • 原文地址:https://www.cnblogs.com/whigym/p/9081120.html
Copyright © 2011-2022 走看看