Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息。详细的Base64信息,可以参见维基百科:https://en.wikipedia.org/wiki/Base64。今天,我们开始java中base64算法的使用。

结构导航

  1. Java自带的Base64算法
  2. commons-codec的Base64算法
  3. bouncycastle的Base64算法
  4. 自定义的base64算法
  5. 友情链接

Java自带的Base64算法

项目结构如下

一、 引入jdk自带的rt.jar包

要使用Base64Encoder,却发现在Eclipse中无法找到该类,原来Base64Encoder并不属于JDK标准库范畴,但是又包含在了JDK中。

问题的解决方案: Project->Properties,选择Java Build Path设置项,再选择Libraries标签,Add External Jars添加%JAVA_HOME%\jre\lib\rt.jar就行。

二、 我们通过junit方法,来加以对Base64算法的测试,明文:my name is huhx。

private static String src = "my name is huhx";@Test
public void huhxBase64() {try {BASE64Encoder encoder = new BASE64Encoder();String encode = encoder.encode(src.getBytes());System.out.println("encode: " + encode);BASE64Decoder decoder = new BASE64Decoder();String decode = new String(decoder.decodeBuffer(encode));System.out.println("decode: " + decode);} catch (IOException e) {e.printStackTrace();}
}

三、 运行结果如下:

encode: bXkgbmFtZSBpcyBodWh4
decode: my name is huhx

commons-codec的Base64算法

一、 引入commons-codec-1.10.jar包,提供对base64算法的支持

commons-codec-1.10.jar地址:https://www.bouncycastle.org/latest_releases.html

二、 我们通过junit方法,来加以对Base64算法的测试,明文:my name is huhx。

@Test
public void commonCodeBase64() {byte[] encodeBytes = Base64.encodeBase64(src.getBytes());System.out.println("encode: " + new String(encodeBytes));byte[] decodeBytes = Base64.decodeBase64(encodeBytes);System.out.println("decode: " + new String(decodeBytes));
}

三、 运行结果如下:

encode: bXkgbmFtZSBpcyBodWh4
decode: my name is huhx

bcprov的Base64算法

一、 引入bcprov-jdk15on-154.jar,提供对base64算法的支持

bcprov-jdk15on-154.jar地址: https://commons.apache.org/proper/commons-codec/download_codec.cgi

二、 我们通过junit方法,来加以对Base64算法的测试,明文:my name is huhx。

@Test
public void bouncyCodeBase64() {byte[] encodeBytes = org.bouncycastle.util.encoders.Base64.encode(src.getBytes());System.out.println("encode: " + new String(encodeBytes));byte[] decodeBytes = org.bouncycastle.util.encoders.Base64.decode(encodeBytes);System.out.println("decode: " + new String(decodeBytes));
}

三、 运行结果如下:

encode: bXkgbmFtZSBpcyBodWh4
decode: my name is huhx

自定义的base64算法

一、 HuhxBase64.java的自定义算法,内容如下:

package com.huhx.base64.jdk;/*** writer: huhx*/
public class HuhxBase64 {private static final String CODES = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";// base64解密private static byte[] base64Decode(String input) {if (input.length() % 4 != 0) {throw new IllegalArgumentException("Invalid base64 input");}byte decoded[] = new byte[((input.length() * 3) / 4) - (input.indexOf('=') > 0 ? (input.length() - input.indexOf('=')) : 0)];char[] inChars = input.toCharArray();int j = 0;int b[] = new int[4];for (int i = 0; i < inChars.length; i += 4) {// This could be made faster (but more complicated) by precomputing// these index locations.b[0] = CODES.indexOf(inChars[i]);b[1] = CODES.indexOf(inChars[i + 1]);b[2] = CODES.indexOf(inChars[i + 2]);b[3] = CODES.indexOf(inChars[i + 3]);decoded[j++] = (byte) ((b[0] << 2) | (b[1] >> 4));if (b[2] < 64) {decoded[j++] = (byte) ((b[1] << 4) | (b[2] >> 2));if (b[3] < 64) {decoded[j++] = (byte) ((b[2] << 6) | b[3]);}}}return decoded;}// base64加密private static String base64Encode(byte[] in) {StringBuilder out = new StringBuilder((in.length * 4) / 3);int b;for (int i = 0; i < in.length; i += 3) {b = (in[i] & 0xFC) >> 2;out.append(CODES.charAt(b));b = (in[i] & 0x03) << 4;if (i + 1 < in.length) {b |= (in[i + 1] & 0xF0) >> 4;out.append(CODES.charAt(b));b = (in[i + 1] & 0x0F) << 2;if (i + 2 < in.length) {b |= (in[i + 2] & 0xC0) >> 6;out.append(CODES.charAt(b));b = in[i + 2] & 0x3F;out.append(CODES.charAt(b));} else {out.append(CODES.charAt(b));out.append('=');}} else {out.append(CODES.charAt(b));out.append("==");}}return out.toString();}public static void main(String[] args) {String input = "I love you, huhx!";String encode = base64Encode(input.getBytes());System.out.println("encode: " + encode);String decode = new String(base64Decode(encode));System.out.println("decode: " + decode);}
}

二、 运行结果如下:

encode: SSBsb3ZlIHlvdSwgaHVoeCE=
decode: I love you, huhx!

友情链接

  • base64算法的测试代码: http://pan.baidu.com/s/1eSueem2
作者: huhx 
出处: www.cnblogs.com/huhx

java基础----Base64算法的使用相关推荐

  1. mysql字符凭藉_凭借清华扫地僧的路线指引,从Java基础到算法,吊打阿里面试官!...

    本文素材来自于一位铁粉经验分享 上周收到字节跳动的面试邀请,真的又惊又喜.惊得是害怕面试时会被秒杀:喜得是有大厂邀请,是自己能力的一种体现.于是抱着试试看的轻松心态,居然一不小心就反杀了面试官(嘻嘻, ...

  2. java基础之算法_java基础算法

    package com.sxwl; import org.springframework.boot.SpringApplication; import org.springframework.boot ...

  3. java基础之算法_java基础之几种常见的排序算法

    一,冒泡排序 1.原理: 从数组的第一个位置开始两两比较array[index]和array[index+1],如果array[index]大于array[index+1]则交换array[index ...

  4. Java基础 -- 冒泡排序算法(带详细注释)

    冒泡排序的要点: 1.多轮排序,每轮排序中选出最大的元素放在最顶端,并且下次排序不再使用该元素; 2. 使用双for循环,外层for循环控制要排序的次数(轮数), 内层for循环控制当前要排序的元素并 ...

  5. Java基础 排序算法

    概述:排序算法,即通过特定的算法因式将一组或多组数据按照既定模式进行重新排序.这种新序列遵循着一定的规则,体现出一定的规律,因此,经处理后的数据便于筛选和计算,大大提高了计算效率. 常见的有:冒泡排序 ...

  6. 数据加解密基础知识介绍,及Java实现Base64加密(详细)

    加密流程涉及的一些关键词: 明文:准备加密的信息 加密:把明文处理为密文的过程 加密算法:具体实现明文转为密文的算法 加密密钥:通过加密算法进行加密操作需要的密钥 密文:被加密的明文 解密:将密文转为 ...

  7. Java基础:JVM垃圾回收算法

    众所周知,Java的垃圾回收是不需要程序员去手动操控的,而是由JVM去完成.本文介绍JVM进行垃圾回收的各种算法. 1. 如何确定某个对象是垃圾 1.1. 引用计数法 1.2. 可达性分析 2. 典型 ...

  8. Java基础复习-八大基本数据类型-内存模型-基本算法-网络编程

    Java基础 数据类型: 基本数据类型: 整数型:byte short int long(数值型) 浮点型: float double(数值型) 字符型:char 布尔型:boolean 引用数据类型 ...

  9. java算法概述,Java数据结构与算法基础(一)概述与线性结构

    Java数据结构与算法基础(二)递归算法 Java数据结构与算法基础(一)概述与线性结构 学习目的:为了能更顺畅的读很多底层API代码和拓宽解决问题的思路 一.数据结构概述 1.数据结构是什么?数据与 ...

最新文章

  1. 防止重复提交订单-(转)
  2. 算法笔记-异或的使用、异或算法面试题、详细解析、异或的理解与其使用规律
  3. 白月黑羽教python excel_发布程序
  4. 如何让Web.xml变得简洁?
  5. jira 8.2.1 安装 及一些常见的坑
  6. 【ArcGIS遇上Python】ArcGIS Python实现长时间序列遥感影像批量处理--以裁剪为例
  7. 华为手机丢失定位网站_手机端网站优化要从网站的设计和定位开始入手
  8. ApacheCN 学习资源汇总 2018.11
  9. GRIB格式转换心得(转自博客:http://windforestwing.blog.163.com/blog/static/19545412007103084743804/)...
  10. Android Studio插件GsonFormat详解
  11. PDF编辑方法,怎么从PDF中提取页面
  12. CF1015C Songs Compression (#贪心)
  13. arduino智能浇花系统_基于Arduino单片机的智能浇花器
  14. hdu 1757(矩阵快速幂)
  15. 【taro react】---- 兼容微信小程序和H5的海报绘制插件
  16. 求质数(素数)的方法
  17. .NET OCX开发
  18. 2038问题及其解决方案
  19. SecureCRT的安装及破解(详细过程)
  20. 计算机虚拟化(HCIA)

热门文章

  1. 微软亚洲研究院开源图数据库GraphView
  2. 面对世界竞争对手,如何拿到Google PDF开源项目PDFium?
  3. 专访腾讯徐汉彬:日请求高达3.5亿+平台的架构设计及演变
  4. 每日一博 - 延时任务的多种实现方式解读
  5. Spring Boot2.x-13前后端分离的跨域问题解决方法之Nginx
  6. Spring MVC-01循序渐进之Model 2和MVC
  7. Java语言实现二分查找(可查询重复数据)
  8. 学习笔记——深拷贝与浅拷贝
  9. IDEA中的项目没有被SVN管理解决办法
  10. python画人口迁徙图_echarts 手把手教你画迁徙图(城市内部级别+百度地图支持)2...