Base64初探

简介: base64是一种编码格式。

1. 什么是base64

base64是一种使用64个可读字符的一种编码方式
  64个字符如下:
   (a~z)26个小写字母
   (A~Z)26
   +:加号
   /:斜杠

image.png

2. base64原理

首先说说相关编码位数:Hex(十六进制)以4位为一组,而base64以6位为一组 这里的位指的是二进制位

base64将三个字符(3*8位)转化为4个字符(4*6位),文本不足3个字符,对转化6位字符后,后面的剩余的二进制位可能是2位或者4位(因为8X/6余数为2或者4),然后进行补0(补到一共6位,因为base64是以6位为单位)。最后还需加=号,缺少2个二进制位就补一个=号,缺少4个就补充两个==。没有理解的多看看下面的例子。

具体对于转换后余几位情况转换如下(这里主要针对英文,中文转换具体得看中文编码):

1.不需要补位

原文: p h p

对应ASCII: 01110000 01101000 01110000

每6位分割: 011100 000110 100001 110000 |

对应10进制值: 28 6 33 48

Base64对应的字符:c G h w

最后php=cGhw(base64)

2.需要补充四个二进制位

原文: r a n l

ASCII值:01110010 01100001 01101110 01101100

每6位分割:011100 100110 000101 101110 | 011011 00 0000 xxxxxx xxxxxx |

对应10进制值:28 38 5 46 27 0 = = 对应base64字符: c m F u b A = =

结果: ranl=cmFubA==(base64)

3.需要补充两个二进制位

原文 h a c k e

ASCII值: 01101000 01100001 01100011 01101011 01100101

每6位分割: 011010 000110 000101 100011 | 011010 110110 0101 00 xxxxxx |

对应10进制值: 26 6 5 35 26 54 20 =

对应base64字符: a G F j a 2 U =

结果 hacke=aGFja2U=(base64)

3. base64常见用途

1.传输不可见字符(128~255)不方便,容易出错。这里的不可见字符是正对ascii码(0~127)

2.web传输小图片(图片上传与图片显示):利用浏览器直接解析base64或使用js解析,避免多次请求。格式如下

2.1web后台生成/解析字符串

(1):图片生成base64字符串 byte[] data = null;

// 读取图片字节数组
    try {
        InputStream in = new FileInputStream(imgFilePath);
        data = new byte[in.available()];
        in.read(data);
        in.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    // 对字节数组Base64编码
    BASE64Encoder encoder = new BASE64Encoder();
    return encoder.encode(data);// 返回Base64编码过的字节数组字符串

(2):解析

// 对字节数组Base64解码
    if (imgStr == null) // 图像数据为空
        return false;
    BASE64Decoder decoder = new BASE64Decoder();
    try {
        // Base64解码
        byte[] bytes = decoder.decodeBuffer(imgStr);
        for (int i = 0; i < bytes.length; ++i) {
            if (bytes[i] < 0) {// 调整异常数据
                bytes[i] += 256;
            }
        }
        // 生成jpeg图片
        OutputStream out = new FileOutputStream(imgFilePath);
        out.write(bytes);
        out.flush();
        out.close();
        return true;
    } catch (Exception e) {
        return false;
    }
}

附属图片:

image.png

参考文章:

目录
相关文章
|
11月前
|
机器学习/深度学习 安全 网络安全
网络安全词云图与技术浅谈
### 网络安全词云图与技术浅谈 本文介绍了通过词云图展示网络安全关键术语的方法,并探讨了构建现代网络安全体系的关键要素。词云图利用字体大小和颜色突出高频词汇,如恶意软件、防火墙、入侵检测系统等。文中提供了生成词云图的Python代码示例,包括安装依赖库和调整参数。此外,文章详细讨论了恶意软件防护、加密技术、身份验证、DDoS防御、社会工程学防范及威胁情报等核心技术,强调了多层次、多维度的安全策略的重要性。
427 11
网络安全词云图与技术浅谈
|
10月前
|
存储 资源调度 JavaScript
npm、cnpm 和 pnpm 是三种常用的 Node.js 包管理工具
npm、cnpm 和 pnpm 是三种常用的 Node.js 包管理工具。npm 是官方默认的包管理器,提供依赖管理、安装和更新等功能;cnpm 是由阿里巴巴开发的 npm 镜像,专为中国大陆用户优化,解决下载速度慢的问题;pnpm 通过硬链接技术提高安装速度并节省磁盘空间,特别适合磁盘资源紧张的环境。三者命令类似,但各有特色,开发者可根据需求选择合适的工具。
1031 5
|
人工智能 算法 自动驾驶
人工智能的伦理困境:技术发展与社会责任的平衡
在人工智能(AI)技术飞速发展的今天,我们面临着一个前所未有的伦理困境。本文将探讨AI技术带来的挑战,以及如何在技术创新与社会责任之间找到平衡点。我们将从隐私保护、就业影响、算法偏见等方面进行分析,并提出相应的解决方案。
|
存储 DataWorks Oracle
DataWorks操作报错合集之DataWorks操作报错合集之运行节点及其下游,遇到“内部服务错误:创建工作流失败”的问题,该如何排查
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
186 0
|
网络架构
为什么udp流设置1316字节
为什么udp流设置1316字节
313 0
|
JavaScript 前端开发 Shell
mac和windows上安装nvm管理node版本
NVM(Node Version Manager)是前端开发者常用的命令行工具,用于管理计算机上的不同Node.js版本。通过NVM,开发者可以轻松地在多个项目间切换所需的Node.js版本。在Mac上,可以通过cURL或Wget下载安装脚本,或使用包管理工具brew安装。安装后需配置环境变量以识别NVM命令。Windows用户则可通过专用的nvm-windows安装程序完成安装。常用命令包括安装、卸载特定版本、列出已安装版本等。
|
自然语言处理 算法 Java
NLP快速入门:手把手教你用HanLP做中文分词
NLP快速入门:手把手教你用HanLP做中文分词
1378 0
NLP快速入门:手把手教你用HanLP做中文分词
|
运维 资源调度 Kubernetes
没有银弹,只有取舍 - Serverless Kubernetes 的思考与征程(一)
Kubernetes的本质复杂性与附属复杂性到底有什么?我们应该如何应对?
没有银弹,只有取舍 - Serverless Kubernetes 的思考与征程(一)
|
数据安全/隐私保护
太牛了!下载视频号视频用这工具!免费无水印!
太牛了!下载视频号视频用这工具!免费无水印!