base64 编码原理

近期接触AI图片识别,图片转码,从而接触到base64编码原理。为后续实现此编码原理,先学习了解~

base64编码

base64是一种编码方式。
选出64个符号作为基础字符集,将其他字符都转换成这个字符集的内容,包括A~Z a~z 0~9 + /共64个,但偶尔用'='补位,所以实际上是65个。

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

转换步骤

1 三个字节为一组,一个字节为8位2进制,共24个二进制位
2 将24个二进制位分为四组,每组6个二进制位
3 在每组的头部,补充00,变为4组8个二进制位
4 根据对应表格,拿到扩展后的字符

转换列子 Key

(新手画表 懂的大佬评论指导一哈吧)

原始字符 K e y
ASCII 75 101 121
二进制 0100 1011 0110 0101 0111 1001
分割 010010 110110 010101 111001
补位 00010010 00110110 00010101 00111001
转10进制 18 54 21 57
表对应 S 2 V 5

Linux语句获得字符ASCII码值

[root@localhost moic_a] echo K | tr -d "\n" | od -An -t dC
    75
Key

Linux命令转换base64 (Cg==是换行)

[root@localhost moic_a] echo "Key" | base64
S2V5Cg==

当为两个字节时,将16位二进制按6.6.4分开,前两组前加00,第三组前后加00,最后第四位用 '=' 补位

原始字符 K e
ASCII 75 101
二进制 0100 1011 0110 0101
分割 010010 110110 0101
补位 00010010 00110110 00010100
转10进制 18 54 20 =
表对应 S 2 U =
Ke
[root@localhost moic_a] echo "Ke" | base64
S2UK

当为一个字节时,将8位二进制按6.2分开,第一组前面加00,第二组前面加00,后面加0000

原始字符 K
ASCII 75
二进制 0100 1011
分割 010010 11
补位 00010010 00110000
转10进制 18 48 = =
表对应 S w = =
K
[root@localhost moic_a] echo "K" | base64
Swo=

Linux转换和在线转换结果不一致

因为base64编转码有不同的包可实现,包内部算法不同会造成转换结果不一致,所以在url加密时,尽量不要用base64。
base64 在线转换验证
阮一峰大佬博客base64文章链接

你可能感兴趣的:(base64 编码原理)