【ARM 安全系列介绍 3.2 -- Base64 介绍】

Base64 介绍

Base64 是一种基于 64 个可打印字符来表示二进制数据的编码方法。由于直接处理二进制数据在某些场合可能会出现问题(比如在电子邮件或网页中),因此需要一种方式来将二进制数据编码为纯文本格式。Base64 是一种常用的编码方式,它能将二进制数据转换为由 ASCII 字符组成的字符串。

Base64 字符集

Base64 编码使用以下 64 个字符:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ 

此外,还有一个特殊字符 =,用作填充字符,以确保 Base64 编码的字符串长度是 4 的倍数。

编码原理

Base64 编码将每 3 个字节的二进制数据转换为 4 个字节的文本数据。具体步骤如下:

  1. 将每 3 个字节(共 24 位)的数据分成 4 组,每组 6 位。
  2. 将每个 6 位的数值转换为对应的 Base64 字符。
  3. 如果最后一组数据不足 3 个字节,使用 0 进行填充,并在编码结果尾部添加一个或两个 = 作为填充字符。

示例

假设要将文本 “Hello” 进行 Base64 编码。

  1. 将 “Hello” 转换为 ASCII 编码:H -> 72,e -> 101,l -> 108, l -> 108, o -> 111。
  2. 将 ASCII 编码转换为二进制:72 -> 01001000101 -> 01100101108 -> 01101100108 -> 01101100111 -> 01101111
  3. 将二进制数据分组:010010 000110 010101 101100 011011 000110 1111
  4. 由于 “Hello” 为 5 字节,最后一组不足 3 字节,因此需要在二进制末尾添加四个 0 bit 来填充:01101100 01101111 11110000
  5. 将每组 6 位二进制转换为对应的 Base64 字符:010010 -> S000110 -> G010101 -> V101100 -> s011011 -> b000110 -> G1111(+填充)-> v0000(+填充)-> A
  6. 最后的 Base64 编码结果为 “SGVsbG8=”,其中的 “=” 是填充字符。

在 Python 中使用 Base64 编解码

Python 的 base64 模块可以轻松地进行 Base64 的编解码操作。

以下是编码和解码的示例:

import base64 

# 编码 
original_string = "Hello" 
encoded_string = base64.b64encode(original_string.encode("utf-8")) 
print(encoded_string) # 输出: b'SGVsbG8=' 

# 解码 
decoded_bytes = base64.b64decode(encoded_string) 
decoded_string = decoded_bytes.decode("utf-8") 
print(decoded_string) # 输出: Hello 

请注意b64encode 方法返回的是字节串对象,如果你需要得到字符串,可以调用 .decode("utf-8") 进行转换。同样,解码时也需要将字节串转换回字符串。

相关推荐

  1. ARM 安全系列介绍 3.2 -- Base64 介绍

    2023-12-21 06:38:01       29 阅读
  2. ubuntu-basearm64与riscv64) 根文件系统

    2023-12-21 06:38:01       33 阅读
  3. ARM 安全系列介绍 3.1 -- 数字签名算法 ECDSA】

    2023-12-21 06:38:01       34 阅读
  4. ARP安全介绍

    2023-12-21 06:38:01       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-21 06:38:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-21 06:38:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-21 06:38:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-21 06:38:01       20 阅读

热门阅读

  1. 探索Node.js包管理器npm:介绍与使用指南

    2023-12-21 06:38:01       34 阅读
  2. 【工业智能】音频信号相关场景

    2023-12-21 06:38:01       31 阅读
  3. C语言实现寻找10000以内的完数

    2023-12-21 06:38:01       38 阅读
  4. Oracle中Null和‘‘的区别

    2023-12-21 06:38:01       38 阅读
  5. 12月20日,每日信息差

    2023-12-21 06:38:01       35 阅读
  6. 前端加密后端校验(MD5)

    2023-12-21 06:38:01       45 阅读
  7. 2019QWB growpjs

    2023-12-21 06:38:01       39 阅读
  8. linux下载yum和python

    2023-12-21 06:38:01       45 阅读
  9. ubuntu 重装/升级 eigen 教程

    2023-12-21 06:38:01       38 阅读
  10. 数据挖掘概述+探索+预处理(期末)

    2023-12-21 06:38:01       40 阅读
  11. 关于with torch.no_grad:的一些小问题

    2023-12-21 06:38:01       38 阅读