Base64编码原理(纯手编码自己姓名)

本文详细介绍了Base64编码的基本原理及其应用过程,通过实例演示了如何将中文字符转化为Base64编码,并提供了相应的Java代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Base64原理

Base64中的64表示的是0-16 A-Z a-z 和+ / 一共64个字符

Base64是一种编码方式,而并非加密,这种编码因为采用的64种基础字符(可见字符)所以可以全世界通用,大家都认可这一套编码规范

为什么只需要64个字符就可以编码所有的世界上已知的字符 

目前单字符占用最大字节数3个(特殊字符) 中文2个 英文1个

一个字节8 bit

一个最大的字符占3*8=24bit

转化为二进制 最小00000000 最大11111111

重点:而base64中对8位的二进制进行重新分组 

3组8位二进制数-->4组6位二进制数

这边编码方式  最小000000 最大111111 转换为10进制 0-63 一共64个数字

结论:64个数据已经可以编码目前世界上最大字节的字符,所以64已经完全足够,而不需要更多

二、编码步骤

第一步:找到中文在操作系统中的字符编码表对应的十进制代码

第二步:把十进制转化为二进制

第三步:对二进制进行重新分组

第四步:每一组的值转化为十进制

第五步:在base64中找到对应的值即可

三、实际操作

将“谢文峰”三个汉字进行编码

找到汉字对照编码表gb2312 http://www.knowsky.com/resource/gb2312tbl.htm

谢  D0B0+B = 53435                                               文 CEC0 +4 = 52932

峰 B7E0+5 = 47077

将十进制转化为二进制

1101000010111011  1100111011000100  1011011111100101

将3*8 --> 4*6

110100 001011 101111 001110 110001 001011 011111 100101

转化为对应的十进制

52 11 47 14 49 11 31 37

在上图中的base64编码表中转化为对应的字符

0 L v O x L f l

四、测试

注意编码格式要为gb2312,因为汉字对照编码表也是对应的gb2312

之前写的utf-8 怎么核对都不对 ,后来发现用的是gb2312的汉字对照表

package com.huajie.others;

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

import java.io.UnsupportedEncodingException;
import java.util.Base64;

@Slf4j
public class Base64Test {

    @Test
    public void test() throws UnsupportedEncodingException {
        String name = "谢文峰";
        String encodeName = Base64.getEncoder().encodeToString(name.getBytes("gb2312"));
        log.info(encodeName);

        byte[] decode = Base64.getDecoder().decode(encodeName);
        log.info(new String(decode,"gb2312"));
    }

}

运行结果与手动编码一致

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值