zoukankan      html  css  js  c++  java
  • Base64编码过程

    在开发中我们有时需要对一个字符串进行Base64编码,例如在网络传输中数据使用SCII编码而有些特殊字符是不能被协议解析的,所以对数据进行Base64加密后,在进行传输。

    任意的字符串被Base64加密后的字符串只包含都 A-Z a-z 0-9 + / 部分结尾还有 = 

    1 将字符串转换字节数组,获取10进制字节。

    2 将10进制转换2进制

    3 如果10进制是负数则需要求出对应整数的2进制,取反,+1

    4 如果2进制位数不足8位,前边补0

    5 对字节进行6位分组

    7 如不足6位则补8个字节的0

    8 将截取好的2进制字节转换10进制

    9 10进制对应下表就是编码后的结果。

    public static void a() throws Exception {
            String s = "我是中国人";
            byte[] encode = Base64.getEncoder().encode(s.getBytes("UTF-8"));
            
            String s1 = new String(encode,"UTF-8");
            System.out.println(s1);
             //5oiR5piv5Lit5Zu95Lq6
    
            byte[] decode = Base64.getDecoder().decode(s1.getBytes("UTF-8"));
            String s2 = new String(decode,"UTF-8");        
            System.out.println(s2);
            //我是中国人
           
        }
    View Code
    我是中国人对应的10进制字节
    -26,-120,-111,-26,-104,-81,-28,-72,-83,-27,-101,-67,-28,-70,-70,
    因为是负数,所以需要取反+1操作
    -26
    00011010
    11100101
    11100110
    
    -120
    01111000
    10000111
    10001000
    
    -111
    01101111
    10010000
    10010001
    
    -26
    00011010
    11100101
    11100110
    
    -104
    01101000
    10010111
    10011000
    
    -81
    01010001
    10101110
    10101111
    
    -28
    00011100
    11100011
    11100100
    
    -72
    01001000
    10110111
    10111000
    
    -83
    01010011
    10101100
    10101101
    
    -27
    00011011
    11100100
    11100101
    
    -101
    01100101
    10011010
    10011011
    
    -67
    01000011
    10111100
    10111101
    
    -28
    00011100
    11100011
    11100100
    
    -70
    01000110
    10111001
    10111010
    
    
    -70
    01000110
    10111001
    10111010
    View Code
    分成6个一组,转换10进制,查编码表
    111001 101000 100010 010001 111001 101001 100010 101111 111001 001011 100010 101101 111001 011001 101110 111101 111001 001011 101010 111010
      57     40     34     18     57     41     34     47     57    11      34     37     57     25      46     61    57      11    42    58
      5      o      i      R      5      p      i      v      5     L       i      t      5      Z       u      9     5       L     q     6
    View Code

    最后补充,有些字符串转换后会出现 5oiR5piv5Lit5Zu95Lq6MQ== 字符,这表示截取后的字节不足6位,一个 = 号代表补了1个字节也就是8个0

    附录一个进制转换工具的网站

    https://tool.oschina.net/hexconvert/

  • 相关阅读:
    php
    php数据排序---array_multisort
    IOS 线程描述
    IOS 进程描述
    IOS 强指针(strong)和弱指针(weak)
    IOS autosizing(设置控件的固定位置大小)
    IOS UIActivityIndicatorView动画
    IOS UIImageView的帧动画
    IOS Block动画
    IOS UIView动画(封装动画)
  • 原文地址:https://www.cnblogs.com/zumengjie/p/13032908.html
Copyright © 2011-2022 走看看