Base64是一种8位字节代码的编码方式,用于将字节码转换为可见字符的形式进行数据传递。在网络数据传递的时候,并不是所有的字节都可以在在网络中传递。比如对于图片中的二进制流中存在终止符就可能导致数据传输失败;文档数据中的不可见字符虽然可以使用ASCII码表编码表示,但是在邮件传输中是不能够传递不可见的控制字符的。

Base64就是为解决这类问题而产生的,将任意的字节码转化为64个可见字符,然后进行传递和解码。

对于如下的24bit数按照Base64转化为一个4字节数据:

0011  0010  1100  1101  0010  1001

24bit共三个字节数据,按每6位划分得到4组:

001100  101100  110100  101001

每6位前面补两个0得到4字节数据:

00001100  00101100  00110100  00101001

这样每个字节可表示范围为0-63,之后查询码表即可将任意的二进制流转化为可见字符

码表如下:

如下是一个简单的示例代码,使用java中的Base46编码生成一个随机Token

 public String getToken(){// 获取随机数,由于是随机的,所以长度不固定String random = System.currentTimeMillis() + new Random().nextInt() + "";try {MessageDigest md = MessageDigest.getInstance("md5");// 获取不定长随机数的摘要,为一个128位定长任意二进制串// 由于是任意的二进制位,因此在将该byte[] 转化为String的时候就可能会出现乱码或者在网络传输的时候产生错误byte token[] = md.digest(random.getBytes());// 使用前需要导包 sun.misc.BASE64Decoder.jarBASE64Encoder encoder = new BASE64Encoder();// 将摘要的128位进行Base64编码,以解决乱码return encoder.encode(token);} catch (NoSuchAlgorithmException e) {throw new RuntimeException(e);}}

生成结果如下:

U7rubDCfG/d1CXTrVY5YTQ==

参考链接:

http://www.cnblogs.com/hongru/archive/2012/01/14/2321397.html

http://www.cnblogs.com/chengxiaohui/articles/3951129.html

http://my.oschina.net/goal/blog/201032#OSC_h2_11

【Java】 Base64原理及简单应用相关推荐

  1. java 排序原理_简单选择排序算法原理及java实现(超详细)

    简单选择排序的原理 简单选择排序的原理非常简单,即在待排序的数列中寻找最大(或者最小)的一个数,与第 1 个元素进行交换,接着在剩余的待排序的数列中继续找最大(最小)的一个数,与第 2 个元素交换.以 ...

  2. Base64与Java -- Base64简介与原理

    Base64与Java – Base64简介与原理 文章目录 Base64与Java -- Base64简介与原理 简介与用途 为什么叫Base64? 编码流程 常规处理 特殊处理 剩余1个字节 剩余 ...

  3. java agent技术原理及简单实现

    注:本文定义-在函数执行前后增加对应的逻辑的操作统称为MOCK 1.引子 在某天与QA同学进行沟通时,发现QA同学有针对某个方法调用时,有让该方法停止一段时间的需求,我对这部分的功能实现非常好奇,因此 ...

  4. Java注解的基本概念和原理及其简单实用

      一.注解的基本概念和原理及其简单实用 注解(Annotation)提供了一种安全的类似注释的机制,为我们在代码中添加信息提供了一种形式化得方法,使我们可以在稍后某个时刻方便的使用这些数据(通过解析 ...

  5. 《Java虚拟机原理图解》5. JVM类加载器机制与类加载过程

    参考网址:http://blog.csdn.net/luanlouis/article/details/50529868 0.前言 读完本文,你将了解到: 一.为什么说Jabalpur语言是跨平台的 ...

  6. Java NIO原理 图文分析及代码实现

    最近在分析hadoop的RPC(Remote Procedure Call Protocol ,远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.可以参考: ...

  7. java类索引_《Java虚拟机原理图解》1.3、class文件中的访问标志、类索引、父类索引、接口索引集合...

    讲完了class文件中的常量池,我们就相当于克服了class文件中最麻烦的模块了.现在,我们来看一下class文件中紧接着常量池后面的几个东西:访问标志.类索引.父类索引.接口索引集合. 1. 访问标 ...

  8. Java NIO原理和使用

    Java NIO原理和使用 板桥里人 2002/11/01 jdon.com 简介 Java NIO非堵塞应用通常适用用在I/O读写等方面,我们知道,系统运行的性能瓶颈通常在I/O读写,包括对端口和文 ...

  9. 深入了解RabbitMQ工作原理及简单使用

    深入了解RabbitMQ工作原理及简单使用 RabbitMQ系列文章 RabbitMQ在Ubuntu上的环境搭建 深入了解RabbitMQ工作原理及简单使用 RabbitMQ交换器Exchange介绍 ...

最新文章

  1. 框架模式与设计模式之区别
  2. linux下测试个人主页,一键建站集成软件包,Linux上快速搭建测试个人网站
  3. windows系统-汇编语言与机器码的关系
  4. ndk学习6: 使用gdb调试ndk程序一
  5. nginx多入口配置隐藏.php,Nginx配置tp5支持pathinfo以及隐藏入口文件
  6. App Start Up Step
  7. python socket tcp实战_Python socket.TCP_MAXSEG属性代码示例
  8. [2018.07.21 T3] Booom
  9. 关于WIN11使用SecoClient接收返回码超时问题
  10. SpringBoot 静态资源版本管理
  11. Si24R1,CI24R1,nRF24L01简单解析对比
  12. c语言某年某月某日的天数,输入某年某月某日,判断这一天是这一年的第几天...
  13. oracle触发器update本表数据
  14. Mac系统官方资料使用与记录
  15. Pyton 类和对象
  16. contiki学习笔记(七)contiki系统
  17. rabbitmq多个消费者消费同一个队列中的同一条消息。
  18. 什么是rmi?为什么要使用rmi框架?
  19. 超低延时监控视频多终端发布解决方案
  20. ARCGIS SERVER:未指定的错误

热门文章

  1. python matplotlib模块画出的图像转换为.tiff格式
  2. cdh 安装_CDH 中为spark 安装 python3
  3. python官网支持货到付款吗_官网购买的iPhone12pro还没发货?试着用Python快速入手...
  4. OpenMV生成AprilTag码
  5. 记录一下添加查询场地坐标功能中修改判断条件和画点的大小
  6. php 商场收银收费系统,使用的策略模式
  7. SpringBoot配置属性之Server
  8. 《Redis设计与实现》简读
  9. 通用权限管理系统组件 (GPM - General Permissions Manager) 中后一个登录的把前一个登录的踢掉功能的实现...
  10. 管道过滤器模式(Pipe and Filter)与组合模式(修改)