【Java】 Base64原理及简单应用
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原理及简单应用相关推荐
- java 排序原理_简单选择排序算法原理及java实现(超详细)
简单选择排序的原理 简单选择排序的原理非常简单,即在待排序的数列中寻找最大(或者最小)的一个数,与第 1 个元素进行交换,接着在剩余的待排序的数列中继续找最大(最小)的一个数,与第 2 个元素交换.以 ...
- Base64与Java -- Base64简介与原理
Base64与Java – Base64简介与原理 文章目录 Base64与Java -- Base64简介与原理 简介与用途 为什么叫Base64? 编码流程 常规处理 特殊处理 剩余1个字节 剩余 ...
- java agent技术原理及简单实现
注:本文定义-在函数执行前后增加对应的逻辑的操作统称为MOCK 1.引子 在某天与QA同学进行沟通时,发现QA同学有针对某个方法调用时,有让该方法停止一段时间的需求,我对这部分的功能实现非常好奇,因此 ...
- Java注解的基本概念和原理及其简单实用
一.注解的基本概念和原理及其简单实用 注解(Annotation)提供了一种安全的类似注释的机制,为我们在代码中添加信息提供了一种形式化得方法,使我们可以在稍后某个时刻方便的使用这些数据(通过解析 ...
- 《Java虚拟机原理图解》5. JVM类加载器机制与类加载过程
参考网址:http://blog.csdn.net/luanlouis/article/details/50529868 0.前言 读完本文,你将了解到: 一.为什么说Jabalpur语言是跨平台的 ...
- Java NIO原理 图文分析及代码实现
最近在分析hadoop的RPC(Remote Procedure Call Protocol ,远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.可以参考: ...
- java类索引_《Java虚拟机原理图解》1.3、class文件中的访问标志、类索引、父类索引、接口索引集合...
讲完了class文件中的常量池,我们就相当于克服了class文件中最麻烦的模块了.现在,我们来看一下class文件中紧接着常量池后面的几个东西:访问标志.类索引.父类索引.接口索引集合. 1. 访问标 ...
- Java NIO原理和使用
Java NIO原理和使用 板桥里人 2002/11/01 jdon.com 简介 Java NIO非堵塞应用通常适用用在I/O读写等方面,我们知道,系统运行的性能瓶颈通常在I/O读写,包括对端口和文 ...
- 深入了解RabbitMQ工作原理及简单使用
深入了解RabbitMQ工作原理及简单使用 RabbitMQ系列文章 RabbitMQ在Ubuntu上的环境搭建 深入了解RabbitMQ工作原理及简单使用 RabbitMQ交换器Exchange介绍 ...
最新文章
- 框架模式与设计模式之区别
- linux下测试个人主页,一键建站集成软件包,Linux上快速搭建测试个人网站
- windows系统-汇编语言与机器码的关系
- ndk学习6: 使用gdb调试ndk程序一
- nginx多入口配置隐藏.php,Nginx配置tp5支持pathinfo以及隐藏入口文件
- App Start Up Step
- python socket tcp实战_Python socket.TCP_MAXSEG属性代码示例
- [2018.07.21 T3] Booom
- 关于WIN11使用SecoClient接收返回码超时问题
- SpringBoot 静态资源版本管理
- Si24R1,CI24R1,nRF24L01简单解析对比
- c语言某年某月某日的天数,输入某年某月某日,判断这一天是这一年的第几天...
- oracle触发器update本表数据
- Mac系统官方资料使用与记录
- Pyton 类和对象
- contiki学习笔记(七)contiki系统
- rabbitmq多个消费者消费同一个队列中的同一条消息。
- 什么是rmi?为什么要使用rmi框架?
- 超低延时监控视频多终端发布解决方案
- ARCGIS SERVER:未指定的错误
热门文章
- python matplotlib模块画出的图像转换为.tiff格式
- cdh 安装_CDH 中为spark 安装 python3
- python官网支持货到付款吗_官网购买的iPhone12pro还没发货?试着用Python快速入手...
- OpenMV生成AprilTag码
- 记录一下添加查询场地坐标功能中修改判断条件和画点的大小
- php 商场收银收费系统,使用的策略模式
- SpringBoot配置属性之Server
- 《Redis设计与实现》简读
- 通用权限管理系统组件 (GPM - General Permissions Manager) 中后一个登录的把前一个登录的踢掉功能的实现...
- 管道过滤器模式(Pipe and Filter)与组合模式(修改)