Base64的编码原理

这里可能需要借助一些在线工具,例如系统编码的AsciI码对照表,例如我的就是gb2312的,具体查看自己系统编码可以cmd下输入chcp得到一组数字后去编码对照表查找,还有就是各种进制转换(当然也可以进行手算),最后就还有Base64编码对照表

直接上代码

import cn.hutool.core.codec.Base64Decoder;
import cn.hutool.core.codec.Base64Encoder;

/**
 * @author 633805 LYH
 * @version V1.0
 * @description Base64原理
 * @create 2019-03-08 7:42
 * @since 1.7
 */
public class F {
    public static void main(String[] args) {
         /*
         一个字节8个位  普通的汉字两个字节   最大字节为3个字节   例如蒙古文  藏文
         base64基于最大  3个字节的(一个字节八个位)    3*8=24   -----》4*6=24    由于6,8的最小公倍数是24 所以Base64采用6个位的计算  范围就是   000000 (0)  ~  111111  (63)
         每个结果一个字符  总共64 具体组成为 a-z(26)   A-Z(26)  0-9(10)   / +(2个符)    总共64

         第一步:找到中文在操作系统中字符编码的十进制代码(可以采用excel里面的Code函数计算十进制)   cmd中输入chcp  找到系统的编码代号默认936即gb2312
         第二步:十进制转换成二进制
         第三步:对二进制重新编码(六位一组)然后再每组前面加0 凑成8位一个字节 再  变成十进制
         第四步:从Base64编码表中查找其对应的字符

               十进制          二进制
          德   46530      1011010111000010
          邦   45294      1011000011101110
           德邦二进制组合(二进制)                                               10110101110000101011000011101110
          二进制编排(六位区分然后前面补0凑成8位一个字节)                00101101   00011100  00001010   00110000  00111011  00000010
          十进制                                                        45         28         10         48       59         2
           Base64表对照查找                                             t          c          K          w         7         g

           最后产生的字节数一定要是4的倍数,不是就用==代替   例如德邦两个字最后只产生6个字节所以后面需要两个==(因为Base64编码时,是将3个字节转变为4个字节,最终得到的字节数必然是4的倍数)
            */
        try {
            //编码
            String result= Base64Encoder.encode("德邦","gb2312") ;

            System.out.println(result);

            //解码
            String  decode = Base64Decoder.decodeStr("tcKw7g==", "gb2312");
            System.out.println(decode);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值