【精选】Java实现Base64工具类(编码和解码)

您所在的位置:网站首页 url转码Java 【精选】Java实现Base64工具类(编码和解码)

【精选】Java实现Base64工具类(编码和解码)

2023-11-20 00:42| 来源: 网络整理| 查看: 265

目录 一、Base64简介二、Base64编译过程三、Base64工具类四、实践结语

一、Base64简介

  Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。大家可查看RFC2045~RFC2049,上面有MIME的详细规范。

Base64转换表

索引对应的字符索引对应的字符索引对应的字符0A26a5201B27b5312C28c5423D29d5534E30e5645F31f5756G32g5867H33h5978I34i6089J35j61910K36k62+11L37l63/12M38m13N39n14O40o15P41p16Q42q17R43r18S44s19T45t20U46u21V47v22W48w23X49x24Y50y25Z51z 二、Base64编译过程 获取原始字符串对应的ASCII的值把ASCII的值转成二进制数据把所有的二进制数据进行合并将合并后的数据每6个一组进行分组,不足6位则补零把分组后的数据前面补两个零变成二进制把补零后的二进制数据转换为十进制参照base64转换表找到对应的数值对结果长度不是4的倍数则进行填充(一般是"="符号)

Base64编译过程图解如下: 在这里插入图片描述 编译结果校验:

/** * Java原生Base64编码校验(Alian编码后的值) * 此处单元测试的注解是采用:org.junit.Test */ @Test public void verify() { System.out.println("------------------Java原生Base64编码校验--------------------------"); //定义要编码的字符串 String plainText = "Alian"; System.out.println("原始字符串:" + plainText); //获取Java原生的Base64编码对象(java.util.Base64.getEncoder()) String encode = Base64.getEncoder().encodeToString(plainText.getBytes(StandardCharsets.UTF_8)); System.out.println("Java原生编码后的base64字符串:" + encode); }

运行结果:

------------------Java原生Base64编码校验-------------------------- 原始字符串:Alian Java原生编码后的base64字符串:QWxpYW4=

由此可见,我们的编译流程得出的结果和Java原生得到的结果是一致的,解码流程就反过来就行了。

三、Base64工具类

来来来,直接上工具类,进行测试。

Base64Util.java

package com.alian.csdn.utils; /** * @program: CSDN * @description: Base64工具类 * @author: Alian * @create: 2021-06-02 11:20:10 **/ public final class Base64Util { static private final int BASELENGTH = 128; static private final int LOOKUPLENGTH = 64; static private final int TWENTYFOURBITGROUP = 24; static private final int EIGHTBIT = 8; static private final int SIXTEENBIT = 16; static private final int FOURBYTE = 4; static private final int SIGN = -128; static private final char PAD = '='; static private final boolean fDebug = false; static final private byte[] base64Alphabet = new byte[BASELENGTH]; static final private char[] lookUpBase64Alphabet = new char[LOOKUPLENGTH]; static { for (int i = 0; i base64Alphabet[i] = (byte) (i - 'A'); } for (int i = 'z'; i >= 'a'; i--) { base64Alphabet[i] = (byte) (i - 'a' + 26); } for (int i = '9'; i >= '0'; i--) { base64Alphabet[i] = (byte) (i - '0' + 52); } base64Alphabet['+'] = 62; base64Alphabet['/'] = 63; for (int i = 0; i lookUpBase64Alphabet[i] = (char) ('a' + j); } for (int i = 52, j = 0; i return (octect == 0x20 || octect == 0xd || octect == 0xa || octect == 0x9); } private static boolean isPad(char octect) { return (octect == PAD); } private static boolean isData(char octect) { return (octect return null; } int lengthDataBits = binaryData.length * EIGHTBIT; if (lengthDataBits == 0) { return ""; } int fewerThan24bits = lengthDataBits % TWENTYFOURBITGROUP; int numberTriplets = lengthDataBits / TWENTYFOURBITGROUP; int numberQuartet = fewerThan24bits != 0 ? numberTriplets + 1 : numberTriplets; char[] encodedData = new char[numberQuartet * 4]; byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0; int encodedIndex = 0; int dataIndex = 0; if (fDebug) { System.out.println("number of triplets = " + numberTriplets); } for (int i = 0; i System.out.println("b1= " + b1 + ", b2= " + b2 + ", b3= " + b3); } l = (byte) (b2 & 0x0f); k = (byte) (b1 & 0x03); byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); byte val3 = ((b3 & SIGN) == 0) ? (byte) (b3 >> 6) : (byte) ((b3) >> 6 ^ 0xfc); if (fDebug) { System.out.println("val2 = " + val2); System.out.println("k4 = " + (k System.out.println("b1=" + b1); System.out.println("b1


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3