1、原理

简单来将,Base64就是一种用64个Ascii字符来表示任意二进制数据的方法。主要用于将不可打印的字符转换成可打印字符,或者简单的说将二进制数据编码成Ascii字符。Base64是网络上最常用的传输8bit字节数据的编码方式之一。Base64的原理比较简单,每当我们使用Base64时都会先定义一个类似这样的数组:

['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']

上面就是Base64的索引表,字符选用了”A-Z、a-z、0-9、+、/” 64个可打印字符,这是标准的Base64协议规定。在使用中我们还会看到“=”或“==”号出现在Base64的编码结果中,“=”在此是作为填充字符出现,后面会讲到。

具体转换步骤如下:

  1. 将待转换的字符串每三个字节分为一组,每个字节占8bit,那么共有24个二进制位。
  2. 将上面的24个二进制位每6个一组,共分为4组。
  3. 在每组前面添加两个0,每组由6个变为8个二进制位,总共32个二进制位,即四个字节。
  4. 根据Base64编码对照表(见下图)获得对应的值。
  5. 在编码后的字符串后面添加1个或2个等号“=”,表示所添加的零值字节数。解码的时候,会自动去掉。

2、例子

转换前 11111111, 11111111, 11111111 (二进制)。

转换后 00111111, 00111111, 00111111, 00111111 (二进制)。

上面的三个字节是原文,下面的四个字节是转换后的Base64编码,其前两位均为0。

转换后,我们用一个码表来得到我们想要的字符串(也就是最终的Base64编码),这个表是这样的:

从这个表中,获得和上面转换后的新字符。可见,编码后变长了。

3、java例子

public class Base64Test {public static void main(String[] args) {String base64encodedString = null;try {base64encodedString = Base64.getEncoder().encodeToString("Base64 Encoding Base64 Encoding Base64 Encoding".getBytes("utf-8"));System.out.println("Base64 编码字符串 (基本) :" + base64encodedString);byte[] base64decodedBytes = Base64.getDecoder().decode(base64encodedString);System.out.println("原始字符串: " + new String(base64decodedBytes, "utf-8"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}}
}

输出如下:

Base64 编码字符串 (基本) :QmFzZTY0IEVuY29kaW5nIEJhc2U2NCBFbmNvZGluZyBCYXNlNjQgRW5jb2Rpbmc=
原始字符串: Base64 Encoding Base64 Encoding Base64 Encoding

4、应用

base64其实不是安全领域下的加密解密算法。虽然有时候经常看到所谓的base64加密解密。其实base64只能算是一个编码算法,对数据内容进行编码来适合传输。虽然base64编码过后原文也变成不能看到的字符格式,但是这种方式很初级,很简单。

Base64编码及应用相关推荐

  1. Python 对图像进行base64编码及解码读取为numpy、opencv、matplot需要的格式

    Python 对图像进行base64编码及解码读取为numpy.opencv.matplot需要的格式 1. 效果图 2. 源码 参考 这篇博客将介绍Python如何对图像进行base64编解码及读取 ...

  2. Java中BASE64 编码

    2019独角兽企业重金招聘Python工程师标准>>> BASE64 编码是一种常用的字符编码,在很多地方都会用到.JDK 中提供了非常方便的 BASE64Encoder 和 BAS ...

  3. js php base64,JavaScript实现Base64编码与解码的代码详解

    本篇文章给大家分享的是jJavaScript实现Base64编码与解码的代码详解,内容挺不错的,希望可以帮助到有需要的朋友 一.加密解密方法使用//1.加密 var str = '124中文内容'; ...

  4. js base64 编码解码

    js base64 编码解码 encode decode,可以直接使用 function Base64() {// private property_keyStr = "ABCDEFGHIJ ...

  5. python使用base64编码解码数据

    python使用base64编码解码数据 base64模块是用来作base64编码解码,常用于小型数据的传输.编码后的数据是一个字符串,其包括a-z.A-Z.0-9./.+共64个字符,即可用6个字节 ...

  6. 将base64编码图片上传到七牛云

    将base64编码图片上传到七牛云 接口说明 FAQ >对象存储 >上传下载> 如何上传base64编码图片到七牛云 在七牛云FAQ上有一篇文章,讲解的接口的使用 https://d ...

  7. php和js中,utf-8编码转成base64编码

    1.php下转化base64编码 php中,文本文件的编码决定了程序变量的编码,比如以下代码在不同编码的php文件中,展示的效果也是不一样的 <?php$word = '严';echo base ...

  8. android Java BASE64编码和解码一:基础

    今天在做Android项目的时候遇到一个问题,需求是向服务器上传一张图片,要求把图片转化成图片流放在 json字符串里传输. 类似这样的: {"name":"jike&q ...

  9. .Net Base64编码

    using System; using System.Text; using System.IO; using System.Security; using System.Security.Crypt ...

  10. Base64编码的字符串与图片的互转

    用Flex写了一个例子,图片(暂时仅支持png.jpg/jpeg)转成base64编码的字符串(默认取上传文件的后缀名,然后添加了"data:image/(png|gif|jpg|jpeg) ...

最新文章

  1. mxnet:mx.sym.BlockGrad理解
  2. - -(我最近的开发..)
  3. 实现图片验证码,其实就是简单的验证码实现,记录一下
  4. iview地区加载_LoadingBar 加载进度条
  5. loadrunner录制事件为0_测试工具LoadRunner常见问题汇总,解决方案整理
  6. 照片识别出错_AI跨年龄人脸识别技术在跨年龄寻亲的应用简析
  7. WORD给文档设置密码保护?
  8. 【转】通过IRQL看NT内核
  9. E: Sub-process /usr/bin/dpkg returned an error code (1)
  10. Java编程:普里姆算法(已知起点求最小生成树)
  11. java高并发代码示例,Java使用代码模拟高并发操作的示例
  12. 2019 序列号_苹果序列号知识扫盲:iPhone序列号含义与查询真伪全攻略
  13. 视频转换器怎么用?迅捷视频转换器图文操作教程分享
  14. 使用H-lua框架制作魔兽争霸地图(3-物编-物品篇1)
  15. 简单实用算法——人民币金额大写转换
  16. 行走的“摄影神器”三星Galaxy S21!五一出游必备
  17. jieba结巴分词加入自定义词典
  18. 安卓巴士总结了近百个Android优秀开源项
  19. MaskRNN Instance Level Video Object Segmentation 论文翻译
  20. Java+freemarker 导出Word文档的实现(包括word for Mac 插入域的方法)-静态数据,动态表格list

热门文章

  1. 基于GIS技术的智慧城市数字底盘(时空大数据平台)
  2. Zmap详细用户手册及DDOS的可行性
  3. 14行代码教你制作自己的有道词典单词本(python)
  4. GoEasy使用详解
  5. qq音乐推荐下载器(一)——模拟搜索,下载,读取评论制作词云并将下载数据传至数据库
  6. CAD打印后图形不显示?
  7. 思科与华为常用交换机产品线介绍
  8. 楼梯计算机方法,怎么计算楼梯踏步方法是什么
  9. 华为hcna认证用处大吗?
  10. 计算机系统基础袁春风试题,计算机系统基础习题解答与教学指导