首页 > 编程语言 >java base64编码、解码的三种方式

java base64编码、解码的三种方式

时间:2023-03-01 17:31:40浏览次数:32  
标签:编码 java String 解码 base64 ItemCode str ItemName

1.用法介绍

方式一:DatatypeConverter

使用jdk自带的DatatypeConverter.java类实现,但是jdk版本必须>=1.6。

import java.io.UnsupportedEncodingException;
import javax.xml.bind.DatatypeConverter;

  编码

/**
* base64编码之方法一
* @explain DatatypeConverter.java实现
* @param str
* 待编码字符串
* @return 编码字符串
*/
public static String encode(String str) {
// base64字符串
String base64Str = "" ;
try {
// String-->byte[]
byte [] data = str.getBytes("utf-8" );
// 编码
base64Str = DatatypeConverter.printBase64Binary(data);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return base64Str;
}

  解码

/**
* base64解码之方法一
* @explain DatatypeConverter.java实现
* @param base64Str
* 待解码字符串
* @return 解码字符串
*/
public static String decode(String base64Str) {
// 解码后的字符串
String str = "" ;
// 解码
byte [] base64Data = DatatypeConverter.parseBase64Binary(base64Str);
try {
// byte[]-->String
str = new String(base64Data, "utf-8" );
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return str;
}

方式二:Base64

使用jdk自带的Base64.java类实现,但是jdk版本必须>=1.8。

import java.io.UnsupportedEncodingException;
import java.util.Base64;
import java.nio.charset.StandardCharsets;

  编码

/**
* base64编码之方法二
* @explain Base64.java实现
* @param str
* 待编码字符串
* @return 编码字符串
*/
public static String encode2(String str) {
// String-->byte[]
byte [] data = str.getBytes(StandardCharsets.UTF_8);
// 编码(base64字符串)
String base64Str = Base64.getEncoder().encodeToString(data);
return base64Str;
}

  解码

/**
* base64解码之方法二
* @explain Base64.java实现
* @param base64Str
* 待解码字符串
* @return 解码字符串
*/
public static String decode2(String base64Str) {
// 解码
byte [] base64Data = Base64.getDecoder().decode(base64Str);
// byte[]-->String(解码后的字符串)
String str = new String(base64Data, StandardCharsets.UTF_8);
return str;
}

方式三:Base64

  所需jar包:commons-codec.jar

<!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.15</version>
</dependency>
import java.io.UnsupportedEncodingException;
import org.apache.commons.codec.binary.Base64;
import java.nio.charset.StandardCharsets;

  编码

/**
* base64编码之方法三
* @explain Base64.java实现
* @param str
* 待编码字符串
* @return 编码字符串
*/
public static String encode3(String str) {
// String-->byte[]
byte [] data = str.getBytes(StandardCharsets.UTF_8);
// 编码(base64字符串)
String base64Str =Base64.encodeBase64String(data).replaceAll("\r\n" , "");
return base64Str;
}

  解码

/**
* base64解码之方法三
* @explain Base64.java实现
* @param base64Str
* 待解码字符串
* @return 解码字符串
*/
public static String decode3(String base64Str) {
// 解码
byte [] base64Data = Base64.decodeBase64(base64Str);
// byte[]-->String(解码后的字符串)
String str = new String(base64Data, StandardCharsets.UTF_8);
return str;
}

  2022年9月23日10:21:00

/*
* base64编码(不补位)
* @explain: 不进行多余的=填充
* @date: 2020年07月13日 0013 10:39
* @param: str
* @return: java.lang.String base码
*/
@NotNull
public static String encodeURLSafe(String str) {
if (StringUtils.isEmpty(str)) return "";

log.debug("base64待编码字符串:\n" + str);
// 字符串转base64
byte[] byteArray = str.getBytes(StandardCharsets.UTF_8);
// 编码
String result = encodeURLSafe(byteArray);
log.debug("base64编码结果:\n" + result);
return result;
}

/*
* 二进制转base64
* @description: 3位一组,当最后一组不足3位时,不用=号填充
* @date: 2022/3/1 21:00
* @param: bytes
* @return: java.lang.String
*/
@NotNull
public static String encodeURLSafe(byte[] bytes) {
if (ByteUtils.isEmpty(bytes)) return "";
return Base64.encodeBase64URLSafeString(bytes);
}

 20200824

方式四:

  所需jar包:tomcat-coyote.jar

  编码与解码方式与方式三一样,这里不再赘述。

20200827

方式五:

  所需jar包:spring-core.jar

  用法大同小异,不再赘述。

2022年9月22日18:21:42

方式五,不能将解决自动补位的问题

String str = "Marydon";
System.out.println(org.springframework.util.Base64Utils.encodeToUrlSafeString(str.getBytes(StandardCharsets.UTF_8)));

java base64编码、解码的三种方式_JAVAUTILS

 

另外,需要说明的是关于base64编码与解码的方式不只有这几种方式, 一般情况下,只有jar包中集成的base64相关的class类,就可以直接导包引用。

2.测试

public static void main(String[] args) {
String str = "http://www.cnblogs.com/Marydon20170307" ;
String base64 = Base64Utils.encode(str); // aHR0cDovL3d3dy5jbmJsb2dzLmNvbS9NYXJ5ZG9uMjAxNzAzMDc=
System.out.println(base64);
String str2 = Base64Utils.decode(base64);
System.out.println(str.equals(str2)); // true
}

3.效率比较

  快-->慢:方式二 > 方式一 > 方式三

  因此,如果项目用的是jdk1.8,最佳选择是方式二;jdk1.6,最佳选择是方式一。

20200824

4.只知其一不知其二

  用了这么久的base64,但是,在前段时间的接口对接过程中,却因为它栽了跟头,有必要进行一次总结回顾。

  base64,我们通常的用途有两种:第一种,图片转码;第二种,作为数据加密的方式、步骤之一。

  encodeBase64和encodeBase64URLSafe

  一般情况下,我们只用到了第一个,没有用到第二个,绝大部分人用的也是第一个,网站在线解析也是如此,这就造成了我们只知其一不知其二。

  二者区别:

encodeBase64会对字符串3位一组自动补全,因而最后可能会出现 == 或者 =(缺一个补一个=,缺两个补两个=);

encodeBase64URLSafe则是按照字符串实际位数进行加密,不补全,不会出现 == 或者 =

  举个例子:

  待编码字符串:Marydon,编码后分别是:TWFyeWRvbg、TWFyeWRvbg==。

  上面的区别介绍是从网上找到的,但并没有说全,再看另外两个例子

待编码字符串:
{ "RegionCode" : "410000" , "IvcAgcCode" : "507403" , "Items" :[{ "ItemCode" : "913001001" , "ItemName" : "诊察费" , "IvcType" : "1" , "Stands" :[{ "UpLimit" : 0 , "StandCode" : "001" , "LowerLimit" : 0 , "Unit" : "元" , "StandName" : "诊察费" }]},{ "ItemCode" : "913001002" , "ItemName" : "检查费" , "IvcType" : "1" , "Stands" :[{ "UpLimit" : 0 , "StandCode" : "001" , "LowerLimit" : 0 , "Unit" : "元" , "StandName" : "检查费" }]},{ "ItemCode" : "913001003" , "ItemName" : "化验费" , "IvcType" : "1" , "Stands" :[{ "UpLimit" : 0 , "StandCode" : "001" , "LowerLimit" : 0 , "Unit" : "元" , "StandName" : "化验费" }]},{ "ItemCode" : "913001004" , "ItemName" : "治疗费" , "IvcType" : "1" , "Stands" :[{ "UpLimit" : 0 , "StandCode" : "001" , "LowerLimit" : 0 , "Unit" : "元" , "StandName" : "治疗费" }]},{ "ItemCode" : "913001005" , "ItemName" : "手术费" , "IvcType" : "1" , "Stands" :[{ "UpLimit" : 0 , "StandCode" : "001" , "LowerLimit" : 0 , "Unit" : "元" , "StandName" : "手术费" }]},{ "ItemCode" : "913001006" , "ItemName" : "卫生材料费" , "IvcType" : "1" , "Stands" :[{ "UpLimit" : 0 , "StandCode" : "001" , "LowerLimit" : 0 , "Unit" : "元" , "StandName" : "卫生材料费" }]},{ "ItemCode" : "913001007" , "ItemName" : "西药费" , "IvcType" : "1" , "Stands" :[{ "UpLimit" : 0 , "StandCode" : "001" , "LowerLimit" : 0 , "Unit" : "元" , "StandName" : "西药费" }]},{ "ItemCode" : "913001008" , "ItemName" : "中药饮片" , "IvcType" : "1" , "Stands" :[{ "UpLimit" : 0 , "StandCode" : "001" , "LowerLimit" : 0 , "Unit" : "元" , "StandName" : "中药饮片" }]},{ "ItemCode" : "913001009" , "ItemName" : "中成药费" , "IvcType" : "1" , "Stands" :[{ "UpLimit" : 0 , "StandCode" : "001" , "LowerLimit" : 0 , "Unit" : "元" , "StandName" : "中成药费" }]},{ "ItemCode" : "913001010" , "ItemName" : "挂号费" , "IvcType" : "1" , "Stands" :[{ "UpLimit" : 0 , "StandCode" : "001" , "LowerLimit" : 0 , "Unit" : "元" , "StandName" : "挂号费" }]},{ "ItemCode" : "913001011" , "ItemName" : "一般诊疗费" , "IvcType" : "1" , "Stands" :[{ "UpLimit" : 0 , "StandCode" : "001" , "LowerLimit" : 0 , "Unit" : "元" , "StandName" : "一般诊疗费" }]},{ "ItemCode" : "913001012" , "ItemName" : "其他门诊费" , "IvcType" : "1" , "Stands" :[{ "UpLimit" : 0 , "StandCode" : "001" , "LowerLimit" : 0 , "Unit" : "元" , "StandName" : "其他门诊费" }]},{ "ItemCode" : "913002001" , "ItemName" : "床位费" , "IvcType" : "2" , "Stands" :[{ "UpLimit" : 0 , "StandCode" : "001" , "LowerLimit" : 0 , "Unit" : "元" , "StandName" : "床位费" }]},{ "ItemCode" : "913002002" , "ItemName" : "诊察费" , "IvcType" : "2" , "Stands" :[{ "UpLimit" : 0 , "StandCode" : "001" , "LowerLimit" : 0 , "Unit" : "元" , "StandName" : "诊察费" }]},{ "ItemCode" : "913002003" , "ItemName" : "检查费" , "IvcType" : "2" , "Stands" :[{ "UpLimit" : 0 , "StandCode" : "001" , "LowerLimit" : 0 , "Unit" : "元" , "StandName" : "检查费" }]},{ "ItemCode" : "913002004" , "ItemName" : "化验费" , "IvcType" : "2" , "Stands" :[{ "UpLimit" : 0 , "StandCode" : "001" , "LowerLimit" : 0 , "Unit" : "元" , "StandName" : "化验费" }]},{ "ItemCode" : "913002005" , "ItemName" : "治疗费" , "IvcType" : "2" , "Stands" :[{ "UpLimit" : 0 , "StandCode" : "001" , "LowerLimit" : 0 , "Unit" : "元" , "StandName" : "治疗费" }]},{ "ItemCode" : "913002006" , "ItemName" : "手术费" , "IvcType" : "2" , "Stands" :[{ "UpLimit" : 0 , "StandCode" : "001" , "LowerLimit" : 0 , "Unit" : "元" , "StandName" : "手术费" }]},{ "ItemCode" : "913002007" , "ItemName" : "护理费" , "IvcType" : "2" , "Stands" :[{ "UpLimit" : 0 , "StandCode" : "001" , "LowerLimit" : 0 , "Unit" : "元" , "StandName" : "护理费" }]},{ "ItemCode" : "913002008" , "ItemName" : "卫生材料费" , "IvcType" : "2" , "Stands" :[{ "UpLimit" : 0 , "StandCode" : "001" , "LowerLimit" : 0 , "Unit" : "元" , "StandName" : "卫生材料费" }]},{ "ItemCode" : "913002009" , "ItemName" : "西药费" , "IvcType" : "2" , "Stands" :[{ "UpLimit" : 0 , "StandCode" : "001" , "LowerLimit" : 0 , "Unit" : "元" , "StandName" : "西药费" }]},{ "ItemCode" : "913002010" , "ItemName" : "中药饮片" , "IvcType" : "2" , "Stands" :[{ "UpLimit" : 0 , "StandCode" : "001" , "LowerLimit" : 0 , "Unit" : "元" , "StandName" : "中药饮片" }]},{ "ItemCode" : "913002011" , "ItemName" : "中成药费" , "IvcType" : "2" , "Stands" :[{ "UpLimit" : 0 , "StandCode" : "001" , "LowerLimit" : 0 , "Unit" : "元" , "StandName" : "中成药费" }]},{ "ItemCode" : "913002012" , "ItemName" : "一般诊疗费" , "IvcType" : "2" , "Stands" :[{ "UpLimit" : 0 , "StandCode" : "001" , "LowerLimit" : 0 , "Unit" : "元" , "StandName" : "一般诊疗费" }]},{ "ItemCode" : "913002013" , "ItemName" : "其他住院费用" , "IvcType" : "2" , "Stands" :[{ "UpLimit" : 0 , "StandCode" : "001" , "LowerLimit" : 0 , "Unit" : "元" , "StandName" : "其他住院费用" }]}]}
encodeBase64编码结果:
eyJSZWdpb25Db2RlIjoiNDEwMDAwIiwiSXZjQWdjQ29kZSI6IjUwNzQwMyIsIkl0ZW1zIjpbeyJJdGVtQ29kZSI6IjkxMzAwMTAwMSIsIkl0ZW1OYW1lIjoi6K+K5a+f6LS5IiwiSXZjVHlwZSI6IjEiLCJTdGFuZHMiOlt7IlVwTGltaXQiOjAsIlN0YW5kQ29kZSI6IjAwMSIsIkxvd2VyTGltaXQiOjAsIlVuaXQiOiLlhYMiLCJTdGFuZE5hbWUiOiLor4rlr5/otLkifV19LHsiSXRlbUNvZGUiOiI5MTMwMDEwMDIiLCJJdGVtTmFtZSI6IuajgOafpei0uSIsIkl2Y1R5cGUiOiIxIiwiU3RhbmRzIjpbeyJVcExpbWl0IjowLCJTdGFuZENvZGUiOiIwMDEiLCJMb3dlckxpbWl0IjowLCJVbml0Ijoi5YWDIiwiU3RhbmROYW1lIjoi5qOA5p+l6LS5In1dfSx7Ikl0ZW1Db2RlIjoiOTEzMDAxMDAzIiwiSXRlbU5hbWUiOiLljJbpqozotLkiLCJJdmNUeXBlIjoiMSIsIlN0YW5kcyI6W3siVXBMaW1pdCI6MCwiU3RhbmRDb2RlIjoiMDAxIiwiTG93ZXJMaW1pdCI6MCwiVW5pdCI6IuWFgyIsIlN0YW5kTmFtZSI6IuWMlumqjOi0uSJ9XX0seyJJdGVtQ29kZSI6IjkxMzAwMTAwNCIsIkl0ZW1OYW1lIjoi5rK755aX6LS5IiwiSXZjVHlwZSI6IjEiLCJTdGFuZHMiOlt7IlVwTGltaXQiOjAsIlN0YW5kQ29kZSI6IjAwMSIsIkxvd2VyTGltaXQiOjAsIlVuaXQiOiLlhYMiLCJTdGFuZE5hbWUiOiLmsrvnlpfotLkifV19LHsiSXRlbUNvZGUiOiI5MTMwMDEwMDUiLCJJdGVtTmFtZSI6IuaJi+acr+i0uSIsIkl2Y1R5cGUiOiIxIiwiU3RhbmRzIjpbeyJVcExpbWl0IjowLCJTdGFuZENvZGUiOiIwMDEiLCJMb3dlckxpbWl0IjowLCJVbml0Ijoi5YWDIiwiU3RhbmROYW1lIjoi5omL5pyv6LS5In1dfSx7Ikl0ZW1Db2RlIjoiOTEzMDAxMDA2IiwiSXRlbU5hbWUiOiLljavnlJ/mnZDmlpnotLkiLCJJdmNUeXBlIjoiMSIsIlN0YW5kcyI6W3siVXBMaW1pdCI6MCwiU3RhbmRDb2RlIjoiMDAxIiwiTG93ZXJMaW1pdCI6MCwiVW5pdCI6IuWFgyIsIlN0YW5kTmFtZSI6IuWNq+eUn+adkOaWmei0uSJ9XX0seyJJdGVtQ29kZSI6IjkxMzAwMTAwNyIsIkl0ZW1OYW1lIjoi6KW/6I2v6LS5IiwiSXZjVHlwZSI6IjEiLCJTdGFuZHMiOlt7IlVwTGltaXQiOjAsIlN0YW5kQ29kZSI6IjAwMSIsIkxvd2VyTGltaXQiOjAsIlVuaXQiOiLlhYMiLCJTdGFuZE5hbWUiOiLopb/oja/otLkifV19LHsiSXRlbUNvZGUiOiI5MTMwMDEwMDgiLCJJdGVtTmFtZSI6IuS4reiNr+mlrueJhyIsIkl2Y1R5cGUiOiIxIiwiU3RhbmRzIjpbeyJVcExpbWl0IjowLCJTdGFuZENvZGUiOiIwMDEiLCJMb3dlckxpbWl0IjowLCJVbml0Ijoi5YWDIiwiU3RhbmROYW1lIjoi5Lit6I2v6aWu54mHIn1dfSx7Ikl0ZW1Db2RlIjoiOTEzMDAxMDA5IiwiSXRlbU5hbWUiOiLkuK3miJDoja/otLkiLCJJdmNUeXBlIjoiMSIsIlN0YW5kcyI6W3siVXBMaW1pdCI6MCwiU3RhbmRDb2RlIjoiMDAxIiwiTG93ZXJMaW1pdCI6MCwiVW5pdCI6IuWFgyIsIlN0YW5kTmFtZSI6IuS4reaIkOiNr+i0uSJ9XX0seyJJdGVtQ29kZSI6IjkxMzAwMTAxMCIsIkl0ZW1OYW1lIjoi5oyC5Y+36LS5IiwiSXZjVHlwZSI6IjEiLCJTdGFuZHMiOlt7IlVwTGltaXQiOjAsIlN0YW5kQ29kZSI6IjAwMSIsIkxvd2VyTGltaXQiOjAsIlVuaXQiOiLlhYMiLCJTdGFuZE5hbWUiOiLmjILlj7fotLkifV19LHsiSXRlbUNvZGUiOiI5MTMwMDEwMTEiLCJJdGVtTmFtZSI6IuS4gOiIrOiviueWl+i0uSIsIkl2Y1R5cGUiOiIxIiwiU3RhbmRzIjpbeyJVcExpbWl0IjowLCJTdGFuZENvZGUiOiIwMDEiLCJMb3dlckxpbWl0IjowLCJVbml0Ijoi5YWDIiwiU3RhbmROYW1lIjoi5LiA6Iis6K+K55aX6LS5In1dfSx7Ikl0ZW1Db2RlIjoiOTEzMDAxMDEyIiwiSXRlbU5hbWUiOiLlhbbku5bpl6jor4rotLkiLCJJdmNUeXBlIjoiMSIsIlN0YW5kcyI6W3siVXBMaW1pdCI6MCwiU3RhbmRDb2RlIjoiMDAxIiwiTG93ZXJMaW1pdCI6MCwiVW5pdCI6IuWFgyIsIlN0YW5kTmFtZSI6IuWFtuS7lumXqOiviui0uSJ9XX0seyJJdGVtQ29kZSI6IjkxMzAwMjAwMSIsIkl0ZW1OYW1lIjoi5bqK5L2N6LS5IiwiSXZjVHlwZSI6IjIiLCJTdGFuZHMiOlt7IlVwTGltaXQiOjAsIlN0YW5kQ29kZSI6IjAwMSIsIkxvd2VyTGltaXQiOjAsIlVuaXQiOiLlhYMiLCJTdGFuZE5hbWUiOiLluorkvY3otLkifV19LHsiSXRlbUNvZGUiOiI5MTMwMDIwMDIiLCJJdGVtTmFtZSI6IuiviuWvn+i0uSIsIkl2Y1R5cGUiOiIyIiwiU3RhbmRzIjpbeyJVcExpbWl0IjowLCJTdGFuZENvZGUiOiIwMDEiLCJMb3dlckxpbWl0IjowLCJVbml0Ijoi5YWDIiwiU3RhbmROYW1lIjoi6K+K5a+f6LS5In1dfSx7Ikl0ZW1Db2RlIjoiOTEzMDAyMDAzIiwiSXRlbU5hbWUiOiLmo4Dmn6XotLkiLCJJdmNUeXBlIjoiMiIsIlN0YW5kcyI6W3siVXBMaW1pdCI6MCwiU3RhbmRDb2RlIjoiMDAxIiwiTG93ZXJMaW1pdCI6MCwiVW5pdCI6IuWFgyIsIlN0YW5kTmFtZSI6IuajgOafpei0uSJ9XX0seyJJdGVtQ29kZSI6IjkxMzAwMjAwNCIsIkl0ZW1OYW1lIjoi5YyW6aqM6LS5IiwiSXZjVHlwZSI6IjIiLCJTdGFuZHMiOlt7IlVwTGltaXQiOjAsIlN0YW5kQ29kZSI6IjAwMSIsIkxvd2VyTGltaXQiOjAsIlVuaXQiOiLlhYMiLCJTdGFuZE5hbWUiOiLljJbpqozotLkifV19LHsiSXRlbUNvZGUiOiI5MTMwMDIwMDUiLCJJdGVtTmFtZSI6Iuayu+eWl+i0uSIsIkl2Y1R5cGUiOiIyIiwiU3RhbmRzIjpbeyJVcExpbWl0IjowLCJTdGFuZENvZGUiOiIwMDEiLCJMb3dlckxpbWl0IjowLCJVbml0Ijoi5YWDIiwiU3RhbmROYW1lIjoi5rK755aX6LS5In1dfSx7Ikl0ZW1Db2RlIjoiOTEzMDAyMDA2IiwiSXRlbU5hbWUiOiLmiYvmnK/otLkiLCJJdmNUeXBlIjoiMiIsIlN0YW5kcyI6W3siVXBMaW1pdCI6MCwiU3RhbmRDb2RlIjoiMDAxIiwiTG93ZXJMaW1pdCI6MCwiVW5pdCI6IuWFgyIsIlN0YW5kTmFtZSI6IuaJi+acr+i0uSJ9XX0seyJJdGVtQ29kZSI6IjkxMzAwMjAwNyIsIkl0ZW1OYW1lIjoi5oqk55CG6LS5IiwiSXZjVHlwZSI6IjIiLCJTdGFuZHMiOlt7IlVwTGltaXQiOjAsIlN0YW5kQ29kZSI6IjAwMSIsIkxvd2VyTGltaXQiOjAsIlVuaXQiOiLlhYMiLCJTdGFuZE5hbWUiOiLmiqTnkIbotLkifV19LHsiSXRlbUNvZGUiOiI5MTMwMDIwMDgiLCJJdGVtTmFtZSI6IuWNq+eUn+adkOaWmei0uSIsIkl2Y1R5cGUiOiIyIiwiU3RhbmRzIjpbeyJVcExpbWl0IjowLCJTdGFuZENvZGUiOiIwMDEiLCJMb3dlckxpbWl0IjowLCJVbml0Ijoi5YWDIiwiU3RhbmROYW1lIjoi5Y2r55Sf5p2Q5paZ6LS5In1dfSx7Ikl0ZW1Db2RlIjoiOTEzMDAyMDA5IiwiSXRlbU5hbWUiOiLopb/oja/otLkiLCJJdmNUeXBlIjoiMiIsIlN0YW5kcyI6W3siVXBMaW1pdCI6MCwiU3RhbmRDb2RlIjoiMDAxIiwiTG93ZXJMaW1pdCI6MCwiVW5pdCI6IuWFgyIsIlN0YW5kTmFtZSI6Iuilv+iNr+i0uSJ9XX0seyJJdGVtQ29kZSI6IjkxMzAwMjAxMCIsIkl0ZW1OYW1lIjoi5Lit6I2v6aWu54mHIiwiSXZjVHlwZSI6IjIiLCJTdGFuZHMiOlt7IlVwTGltaXQiOjAsIlN0YW5kQ29kZSI6IjAwMSIsIkxvd2VyTGltaXQiOjAsIlVuaXQiOiLlhYMiLCJTdGFuZE5hbWUiOiLkuK3oja/ppa7niYcifV19LHsiSXRlbUNvZGUiOiI5MTMwMDIwMTEiLCJJdGVtTmFtZSI6IuS4reaIkOiNr+i0uSIsIkl2Y1R5cGUiOiIyIiwiU3RhbmRzIjpbeyJVcExpbWl0IjowLCJTdGFuZENvZGUiOiIwMDEiLCJMb3dlckxpbWl0IjowLCJVbml0Ijoi5YWDIiwiU3RhbmROYW1lIjoi5Lit5oiQ6I2v6LS5In1dfSx7Ikl0ZW1Db2RlIjoiOTEzMDAyMDEyIiwiSXRlbU5hbWUiOiLkuIDoiKzor4rnlpfotLkiLCJJdmNUeXBlIjoiMiIsIlN0YW5kcyI6W3siVXBMaW1pdCI6MCwiU3RhbmRDb2RlIjoiMDAxIiwiTG93ZXJMaW1pdCI6MCwiVW5pdCI6IuWFgyIsIlN0YW5kTmFtZSI6IuS4gOiIrOiviueWl+i0uSJ9XX0seyJJdGVtQ29kZSI6IjkxMzAwMjAxMyIsIkl0ZW1OYW1lIjoi5YW25LuW5L2P6Zmi6LS555SoIiwiSXZjVHlwZSI6IjIiLCJTdGFuZHMiOlt7IlVwTGltaXQiOjAsIlN0YW5kQ29kZSI6IjAwMSIsIkxvd2VyTGltaXQiOjAsIlVuaXQiOiLlhYMiLCJTdGFuZE5hbWUiOiLlhbbku5bkvY/pmaLotLnnlKgifV19XX0K
encodeBase64URLSafe编码结果:
eyJSZWdpb25Db2RlIjoiNDEwMDAwIiwiSXZjQWdjQ29kZSI6IjUwNjQwMiIsIkl0ZW1zIjpbeyJJdGVtQ29kZSI6IjkxMzAwMTAwMiIsIkl0ZW1OYW1lIjoi5qOA5p-l6LS5IiwiSXZjVHlwZSI6IjEiLCJTdGFuZHMiOlt7IlVwTGltaXQiOjAsIlN0YW5kQ29kZSI6IjAwMSIsIkxvd2VyTGltaXQiOjAsIlVuaXQiOiLlhYMiLCJTdGFuZE5hbWUiOiLmo4Dmn6XotLkifV19LHsiSXRlbUNvZGUiOiI5MTMwMDEwMDMiLCJJdGVtTmFtZSI6IuWMlumqjOi0uSIsIkl2Y1R5cGUiOiIyIiwiU3RhbmRzIjpbeyJVcExpbWl0IjowLCJTdGFuZENvZGUiOiIwMDEiLCJMb3dlckxpbWl0IjowLCJVbml0Ijoi5YWDIiwiU3RhbmROYW1lIjoi5YyW6aqM6LS5In1dfSx7Ikl0ZW1Db2RlIjoiOTEzMDAxMDA0IiwiSXRlbU5hbWUiOiLmsrvnlpfotLkiLCJJdmNUeXBlIjoiMSIsIlN0YW5kcyI6W3siVXBMaW1pdCI6MCwiU3RhbmRDb2RlIjoiMDAxIiwiTG93ZXJMaW1pdCI6MCwiVW5pdCI6IuWFgyIsIlN0YW5kTmFtZSI6Iuayu-eWl-i0uSJ9XX0seyJJdGVtQ29kZSI6IjkxMzAwMTAwNSIsIkl0ZW1OYW1lIjoi5omL5pyv6LS5IiwiSXZjVHlwZSI6IjIiLCJTdGFuZHMiOlt7IlVwTGltaXQiOjAsIlN0YW5kQ29kZSI6IjAwMSIsIkxvd2VyTGltaXQiOjAsIlVuaXQiOiLlhYMiLCJTdGFuZE5hbWUiOiLmiYvmnK_otLkifV19LHsiSXRlbUNvZGUiOiI5MTMwMDEwMDYiLCJJdGVtTmFtZSI6IuWNq-eUn-adkOaWmei0uSIsIkl2Y1R5cGUiOiIyIiwiU3RhbmRzIjpbeyJVcExpbWl0IjowLCJTdGFuZENvZGUiOiIwMDEiLCJMb3dlckxpbWl0IjowLCJVbml0Ijoi5YWDIiwiU3RhbmROYW1lIjoi5Y2r55Sf5p2Q5paZ6LS5In1dfSx7Ikl0ZW1Db2RlIjoiOTEzMDAxMDA3IiwiSXRlbU5hbWUiOiLopb_oja_otLkiLCJJdmNUeXBlIjoiMSIsIlN0YW5kcyI6W3siVXBMaW1pdCI6MCwiU3RhbmRDb2RlIjoiMDAxIiwiTG93ZXJMaW1pdCI6MCwiVW5pdCI6IuWFgyIsIlN0YW5kTmFtZSI6Iuilv-iNr-i0uSJ9XX0seyJJdGVtQ29kZSI6IjkxMzAwMTAwOCIsIkl0ZW1OYW1lIjoi5Lit6I2v6aWu54mHIiwiSXZjVHlwZSI6IjEiLCJTdGFuZHMiOlt7IlVwTGltaXQiOjAsIlN0YW5kQ29kZSI6IjAwMSIsIkxvd2VyTGltaXQiOjAsIlVuaXQiOiLlhYMiLCJTdGFuZE5hbWUiOiLkuK3oja_ppa7niYcifV19LHsiSXRlbUNvZGUiOiI5MTMwMDEwMDkiLCJJdGVtTmFtZSI6IuS4reaIkOiNr-i0uSIsIkl2Y1R5cGUiOiIyIiwiU3RhbmRzIjpbeyJVcExpbWl0IjowLCJTdGFuZENvZGUiOiIwMDEiLCJMb3dlckxpbWl0IjowLCJVbml0Ijoi5YWDIiwiU3RhbmROYW1lIjoi5Lit5oiQ6I2v6LS5In1dfSx7Ikl0ZW1Db2RlIjoiOTEzMDAxMDEwIiwiSXRlbU5hbWUiOiLmjILlj7fotLkiLCJJdmNUeXBlIjoiMSIsIlN0YW5kcyI6W3siVXBMaW1pdCI6MCwiU3RhbmRDb2RlIjoiMDAxIiwiTG93ZXJMaW1pdCI6MCwiVW5pdCI6IuWFgyIsIlN0YW5kTmFtZSI6IuaMguWPt-i0uSJ9XX0seyJJdGVtQ29kZSI6IjkxMzAwMTAxMSIsIkl0ZW1OYW1lIjoi5LiA6Iis6K-K55aX6LS5IiwiSXZjVHlwZSI6IjEiLCJTdGFuZHMiOlt7IlVwTGltaXQiOjAsIlN0YW5kQ29kZSI6IjAwMSIsIkxvd2VyTGltaXQiOjAsIlVuaXQiOiLlhYMiLCJTdGFuZE5hbWUiOiLkuIDoiKzor4rnlpfotLkifV19XX0
base64待编码字符串:
{ "Type" : 1 , "PayerPartyType" : "1" , "RegionCode" : "410000" , "SerialNumber" : "0000007519" , "IvcAgcCode" : "506402" , "MainExt" :{ "OtherPayAmount" : "0" , "MedicalDate" : "20190117" , "FundPayAmount" : "0" , "MedicalType" : "门诊" , "MedicalInsuranceType" : "新农合" , "AccountPayAmount" : "0" , "Gender" : "男" , "OwnPayAmount" : "15.00" , "SelfpaymentAmount" : "0" , "MedicalInsuranceID" : "104381991001" , "OrgType" : "综合医院" , "PatientNumber" : "1000100201" , "SelfpaymentCost" : "0" }, "PayerPartyName" : "马露" , "RepCreater" : "李四" , "Items" :[{ "ItemCode" : "9940301020" , "ItemRemark" :[], "ItemQuantity" : "1" , "Amount" : "10.00" , "ItemName" : "检查费" , "ItemStd" : "10.00" , "ItemUnit" :[], "AuxItem" :[{ "AuxItemQuantity" : "1" , "AuxItemAmount" : "10.0000" , "AuxItemStd" : "10.0000" , "AuxItemRelatedCode" : "9940301020" , "AuxItemUnit" : "人次" , "AuxItemRemark" : "无自付" , "AuxItemRelatedName" : "检查费" , "AuxItemName" : "角膜曲率检查" }]},{ "ItemCode" : "9940301070" , "ItemRemark" :[], "ItemQuantity" : "1" , "Amount" : "5.00" , "ItemName" : "西药费" , "ItemStd" : "5.00" , "ItemUnit" :[], "AuxItem" :[{ "AuxItemQuantity" : "1" , "AuxItemAmount" : "5.0000" , "AuxItemStd" : "5.0000" , "AuxItemRelatedCode" : "9940301070" , "AuxItemUnit" : "支" , "AuxItemRemark" : "无自付" , "AuxItemRelatedName" : "西药费" , "AuxItemName" : "复方托吡卡胺滴眼液" }]}], "TotalAmount" : "15.00" , "PayerPartyCode" :[]}
base64编码结果:
eyJUeXBlIjoxLCJQYXllclBhcnR5VHlwZSI6IjEiLCJSZWdpb25Db2RlIjoiNDEwMDAwIiwiU2VyaWFsTnVtYmVyIjoiMDAwMDAwNzUxOSIsIkl2Y0FnY0NvZGUiOiI1MDY0MDIiLCJNYWluRXh0Ijp7Ik90aGVyUGF5QW1vdW50IjoiMCIsIk1lZGljYWxEYXRlIjoiMjAxOTAxMTciLCJGdW5kUGF5QW1vdW50IjoiMCIsIk1lZGljYWxUeXBlIjoi6Zeo6K-KIiwiTWVkaWNhbEluc3VyYW5jZVR5cGUiOiLmlrDlhpzlkIgiLCJBY2NvdW50UGF5QW1vdW50IjoiMCIsIkdlbmRlciI6IueUtyIsIk93blBheUFtb3VudCI6IjE1LjAwIiwiU2VsZnBheW1lbnRBbW91bnQiOiIwIiwiTWVkaWNhbEluc3VyYW5jZUlEIjoiMTA0MzgxOTkxMDAxIiwiT3JnVHlwZSI6Iue7vOWQiOWMu-mZoiIsIlBhdGllbnROdW1iZXIiOiIxMDAwMTAwMjAxIiwiU2VsZnBheW1lbnRDb3N0IjoiMCJ9LCJQYXllclBhcnR5TmFtZSI6IumprOmcsiIsIlJlcENyZWF0ZXIiOiLmnY7lm5siLCJJdGVtcyI6W3siSXRlbUNvZGUiOiI5OTQwMzAxMDIwIiwiSXRlbVJlbWFyayI6W10sIkl0ZW1RdWFudGl0eSI6IjEiLCJBbW91bnQiOiIxMC4wMCIsIkl0ZW1OYW1lIjoi5qOA5p-l6LS5IiwiSXRlbVN0ZCI6IjEwLjAwIiwiSXRlbVVuaXQiOltdLCJBdXhJdGVtIjpbeyJBdXhJdGVtUXVhbnRpdHkiOiIxIiwiQXV4SXRlbUFtb3VudCI6IjEwLjAwMDAiLCJBdXhJdGVtU3RkIjoiMTAuMDAwMCIsIkF1eEl0ZW1SZWxhdGVkQ29kZSI6Ijk5NDAzMDEwMjAiLCJBdXhJdGVtVW5pdCI6IuS6uuasoSIsIkF1eEl0ZW1SZW1hcmsiOiLml6Doh6rku5giLCJBdXhJdGVtUmVsYXRlZE5hbWUiOiLmo4Dmn6XotLkiLCJBdXhJdGVtTmFtZSI6IuinkuiGnOabsueOh-ajgOafpSJ9XX0seyJJdGVtQ29kZSI6Ijk5NDAzMDEwNzAiLCJJdGVtUmVtYXJrIjpbXSwiSXRlbVF1YW50aXR5IjoiMSIsIkFtb3VudCI6IjUuMDAiLCJJdGVtTmFtZSI6Iuilv-iNr-i0uSIsIkl0ZW1TdGQiOiI1LjAwIiwiSXRlbVVuaXQiOltdLCJBdXhJdGVtIjpbeyJBdXhJdGVtUXVhbnRpdHkiOiIxIiwiQXV4SXRlbUFtb3VudCI6IjUuMDAwMCIsIkF1eEl0ZW1TdGQiOiI1LjAwMDAiLCJBdXhJdGVtUmVsYXRlZENvZGUiOiI5OTQwMzAxMDcwIiwiQXV4SXRlbVVuaXQiOiLmlK8iLCJBdXhJdGVtUmVtYXJrIjoi5peg6Ieq5LuYIiwiQXV4SXRlbVJlbGF0ZWROYW1lIjoi6KW_6I2v6LS5IiwiQXV4SXRlbU5hbWUiOiLlpI3mlrnmiZjlkKHljaHog7rmu7TnnLzmtrIifV19XSwiVG90YWxBbW91bnQiOiIxNS4wMCIsIlBheWVyUGFydHlDb2RlIjpbXX0
base64编码结果:
eyJUeXBlIjoxLCJQYXllclBhcnR5VHlwZSI6IjEiLCJSZWdpb25Db2RlIjoiNDEwMDAwIiwiU2VyaWFsTnVtYmVyIjoiMDAwMDAwNzUxOSIsIkl2Y0FnY0NvZGUiOiI1MDY0MDIiLCJNYWluRXh0Ijp7Ik90aGVyUGF5QW1vdW50IjoiMCIsIk1lZGljYWxEYXRlIjoiMjAxOTAxMTciLCJGdW5kUGF5QW1vdW50IjoiMCIsIk1lZGljYWxUeXBlIjoi6Zeo6K+KIiwiTWVkaWNhbEluc3VyYW5jZVR5cGUiOiLmlrDlhpzlkIgiLCJBY2NvdW50UGF5QW1vdW50IjoiMCIsIkdlbmRlciI6IueUtyIsIk93blBheUFtb3VudCI6IjE1LjAwIiwiU2VsZnBheW1lbnRBbW91bnQiOiIwIiwiTWVkaWNhbEluc3VyYW5jZUlEIjoiMTA0MzgxOTkxMDAxIiwiT3JnVHlwZSI6Iue7vOWQiOWMu+mZoiIsIlBhdGllbnROdW1iZXIiOiIxMDAwMTAwMjAxIiwiU2VsZnBheW1lbnRDb3N0IjoiMCJ9LCJQYXllclBhcnR5TmFtZSI6IumprOmcsiIsIlJlcENyZWF0ZXIiOiLmnY7lm5siLCJJdGVtcyI6W3siSXRlbUNvZGUiOiI5OTQwMzAxMDIwIiwiSXRlbVJlbWFyayI6W10sIkl0ZW1RdWFudGl0eSI6IjEiLCJBbW91bnQiOiIxMC4wMCIsIkl0ZW1OYW1lIjoi5qOA5p+l6LS5IiwiSXRlbVN0ZCI6IjEwLjAwIiwiSXRlbVVuaXQiOltdLCJBdXhJdGVtIjpbeyJBdXhJdGVtUXVhbnRpdHkiOiIxIiwiQXV4SXRlbUFtb3VudCI6IjEwLjAwMDAiLCJBdXhJdGVtU3RkIjoiMTAuMDAwMCIsIkF1eEl0ZW1SZWxhdGVkQ29kZSI6Ijk5NDAzMDEwMjAiLCJBdXhJdGVtVW5pdCI6IuS6uuasoSIsIkF1eEl0ZW1SZW1hcmsiOiLml6Doh6rku5giLCJBdXhJdGVtUmVsYXRlZE5hbWUiOiLmo4Dmn6XotLkiLCJBdXhJdGVtTmFtZSI6IuinkuiGnOabsueOh+ajgOafpSJ9XX0seyJJdGVtQ29kZSI6Ijk5NDAzMDEwNzAiLCJJdGVtUmVtYXJrIjpbXSwiSXRlbVF1YW50aXR5IjoiMSIsIkFtb3VudCI6IjUuMDAiLCJJdGVtTmFtZSI6Iuilv+iNr+i0uSIsIkl0ZW1TdGQiOiI1LjAwIiwiSXRlbVVuaXQiOltdLCJBdXhJdGVtIjpbeyJBdXhJdGVtUXVhbnRpdHkiOiIxIiwiQXV4SXRlbUFtb3VudCI6IjUuMDAwMCIsIkF1eEl0ZW1TdGQiOiI1LjAwMDAiLCJBdXhJdGVtUmVsYXRlZENvZGUiOiI5OTQwMzAxMDcwIiwiQXV4SXRlbVVuaXQiOiLmlK8iLCJBdXhJdGVtUmVtYXJrIjoi5peg6Ieq5LuYIiwiQXV4SXRlbVJlbGF0ZWROYW1lIjoi6KW/6I2v6LS5IiwiQXV4SXRlbU5hbWUiOiLlpI3mlrnmiZjlkKHljaHog7rmu7TnnLzmtrIifV19XSwiVG90YWxBbW91bnQiOiIxNS4wMCIsIlBheWVyUGFydHlDb2RlIjpbXX0=

  总的来说,二者区别有:

  base64,编码可能会生成+,/,=,三种可能同时存在,也可能都不存在;

  urlsafe,编码可能会生成-,最多有且只有这一种符号。  

  以后,谁再跟你谈标准的base64格式,你就可以锤他啦。

方式三、方式四都支持base64URLSafe()方法。

2022年9月22日18:14:26

Base64加密补位规则

  所谓Base64,就是说选出64个字符----小写字母a-z、大写字母A-Z、数字0-9、符号"+"、"/"(再加上作为垫字的"=",实际上是65个字符)----作为一个基本字符集。然后,其他所有符号都转换成这个字符集中的字符。

  转换方式可以分为四步:

  第一步,将每三个字节作为一组,一共是24个二进制位。
  第二步,将这24个二进制位分为四组,每个组有6个二进制位。
  第三步,在每组前面加两个00,扩展成32个二进制位,即四个字节。
  第四步,根据下表,得到扩展后的每个字节的对应符号,这就是Base64的编码值。

  Base64将三个字节转化成四个字节,因此Base64编码后的文本,会比原文本大出三分之一左右。

  此时如果字节数不足三,则这样处理:

  a)二个字节的情况:将这二个字节的一共16个二进制位,按照上面的规则,转成三组,最后一组除了前面加两个0以外,后面也要加两个0。这样得到一个三位的Base64编码,再在末尾补上一个"="号。
  比如,“Ma"这个字符串是两个字节,可以转化成三组00010011、00010110、00010000以后,对应Base64值分别为T、W、E,再补上一个”=“号,因此"Ma"的Base64编码就是TWE=。
  b)一个字节的情况:将这一个字节的8个二进制位,按照上面的规则转成二组,最后一组除了前面加二个0以外,后面再加4个0。这样得到一个二位的Base64编码,再在末尾补上两个”="号。
  比如,“M"这个字母是一个字节,可以转化为二组00010011、00010000,对应的Base64值分别为T、Q,再补上二个”="号,因此"M"的Base64编码就是TQ==。

 

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

作者:​​Marydon​​



标签:编码,java,String,解码,base64,ItemCode,str,ItemName
From: https://blog.51cto.com/u_15964717/6093954

相关文章

  • java AES加密、解密(兼容windows和linux)
     1.准备工作2018年10月24日10点46分importjava.security.SecureRandom;importjavax.crypto.Cipher;importjavax.crypto.KeyGenerator;importjavax.crypto.SecretKe......
  • java List 源码
    概述底层通过数组实现,所以查询/更新效率很高,删除/增加跟位置相关,除未实现同步外和Vector大致相同扩容publicbooleanadd(Ee){//数组扩容,不是一定要扩容,需要......
  • 算法刷题-计算日期到天数转换-JAVA
    0x00引言为获取一个良好的算法思维,以及不再成为一个脚本小子,争取每天一道算法题,培养自己的逻辑思维,温顾各类型语言语法知识。题解只写自己理解的解法,其他解法不再增加。......
  • Java应用【十】使用Mockito进行模拟和测试桩
    如果您觉得本博客的内容对您有所帮助或启发,请关注我的博客,以便第一时间获取最新技术文章和教程。同时,也欢迎您在评论区留言,分享想法和建议。谢谢支持!相关阅读:​​Java应用【......
  • Java操作Excel之EasyExcel、标题、背景色设置
    首先不管是学习或者是了解什么技术都要先去看下官方文档https://alibaba-easyexcel.github.io/index.html原文地址 https://www.cnblogs.com/zhangsan-plus/p/16503278.h......
  • Java基础随笔(1)abstract和interface
    publicabstractclassDemo14{publicStringvar="123";publicabstractdoublet1();publicvoidt2(Stringq){System.out.println("1......
  • Java的学习(冒泡排序和稀疏数组)
    1.比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置2.每一次比较,都会产生一个最大或者最小的数字;3.下一轮则可以减少一次排序4.依次循环,直到结束......
  • 【InputStream】Java中InputStream和String之间的转换方法
    【转载】https://blog.csdn.net/lmy86263/article/details/60479350在Java中InputStream和String之间的转化十分普遍,本文主要是总结一下转换的各种方法,包括JDK原生提供的,......
  • JavaScript的引入方式和基础语法
    JavaScript的引入方式放在<body>的后面,</body>的前面基础语法书写语法输出语句变量 var:是全局变量,可以重复声明,会覆盖数据类型运算符其中"=="会先......
  • Qt-FFmpeg开发-视频播放【软解码】(1)
    Qt-FFmpeg开发-视频播放【软解码】目录Qt-FFmpeg开发-视频播放【软解码】1、概述2、实现效果3、FFmpeg软解码流程4、主要代码6、完整源代码更多精彩内容......