Java中Base64的解析

开始这篇文章之前,首先需要明白,Base64的主要用途并不是加密,而是将二进制数转换成方便在网络上传递的字符。
Base64只能算是一个编码算法,对数据内容进行编码从而适合传输。虽然base64编码过后原文也变成不能看到的字符格式,但是方式初级又简单(用于加密的话轻松就能破解就没有意义了)。

一、简介(什么是Base64)

这里直接沿用百度百科中的介绍:
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范。
Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。
Base64由于以上优点被广泛应用于计算机的各个领域,然而由于输出内容中包括两个以上“符号类”字符(+, /, =),不同的应用场景又分别研制了Base64的各种“变种”。为统一和规范化Base64的输出,Base62x被视为无符号化的改进版本。
可参考:《base64-百度百科》

二、原理(怎样进行编码)

Base64要求把每三个8Bit的字节转换为四个6Bit的字节(38 = 46 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。

1、规则
(1)把3个字节变成4个字节。
(2)每76个字符加一个换行符。
(3)最后的结束符也要处理。

2、Base64字母表(最后的到的Base64编码)
在这里插入图片描述
3、实例
例1:
转换前 11111111, 11111111, 11111111 (二进制)
转换后 00111111, 00111111, 00111111, 00111111 (二进制)
上面的三个字节是原文,下面的四个字节是转换后的Base64编码,其前两位均为0。
例2:
转换前 10101101,10111010,01110110
转换后 00101011, 00011011 ,00101001 ,00110110
十进制 43 27 41 54
对应码表中的值 r b p 2
所以上面的24位编码,编码后的Base64值为 rbp2
解码同理,把 rbq2 的二进制位连接上再重组得到三个8位值,得出原码。

三、Java中的Base64

Java上做Base64的编码与解码也是有一个进化的过程,从早期使用JDK中sun.misc.BASE64Encoder和sun.misc.BASE64Decoder两个类;到Apache Commons Codec提供的org.apache.commons.codec.binary.Base64;再到JDK8的java.util.Base64。效率可以说是越来越高,显而易见,我们还是推荐使用java.util.Base64的。
https://blog.csdn.net/zhou_kapenter/article/details/62890262

1、sun.misc.BASE64Encoder和sun.misc.BASE64Decoder

2、org.apache.commons.codec.binary.Base64

3、java.util.Base64
详细介绍后续配上代码实例进行补充。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java解析Base64编码可以使用Java 8新引入的API,也可以使用其他库实现类似功能。在引用\[1\]的代码示例,使用了BASE64Decoder类和decodeBuffer方法来解码Base64字符串。在引用\[2\]的代码示例,使用了Base64Encoder类和encode方法来进行Base64编码,使用Base64Decoder类和decodeBuffer方法来进行Base64解码。另外,还可以使用java.xml.bind.DataTypeConverter提供的printHexBinary和parseBase64Binary方法来进行Base64解析\[3\]。这些方法都可以将Base64编码的字符串转换为原始数据。 #### 引用[.reference_title] - *1* [Java解析Base64编码为图片](https://blog.csdn.net/weixin_50074995/article/details/118603535)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [JavaBase64编码解析](https://blog.csdn.net/dycsos123/article/details/84144010)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Java Base64 加密与解密](https://blog.csdn.net/bhegi_seg/article/details/126582370)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值