【精选】Java实现Base64工具类(编码和解码) |
您所在的位置:网站首页 › url转码Java › 【精选】Java实现Base64工具类(编码和解码) |
目录
一、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 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 |