URL 安全的 Base64 编码

什么是 Base64 编码?

Base64 它是一种用64个字符来表示任意二进制数据的方法。

Base64 编码的原理很简单,首先,准备一个包含64个字符:

然后,对二进制数据进行处理,每3个字节一组,一共是 3x8=24 bit,划为4组,每组正好 6bit,这样我们得到 4 个数字作为索引,然后查表,获得相应的4个字符,就是编码后的字符串。

如果要编码的二进制数据不是3的倍数,最后会剩下1个或2个字节怎么办?Base64 会用 \x00 字节在末尾补足后,再在编码的末尾加上1个或2=号,表示补了多少字节,解码的时候,会自动去掉。

下图展示了原字符串 hello 转换为 Base64 编码过程。

在 "Base64编码后字符" 的阶段,最后一个字符 000000 正常应该转换为 A 的,不过由于最后一个字符是补充上去的,所以不会转换为 A ,而是使用对应数量的 = 补充。

URL 安全的 Base64 编码

由于标准的 Base64 编码之后可能出现字符 +/ ,这样在 URL 中就不能直接作为参数,所以 URL 安全的 Base64 编码,需要把字符 +/ 分别变成 -_,另外 = 字符也可能出现在 Base64 编码中,但 = 用在 URLCookie 里面会造成歧义,所以,很多 URL 安全的 Base64 编码也会把 = 去掉。

URL 安全的 Base64 编码:

  • 对数据进行 base64 编码;
  • base64 编码后的字符串中的 +/ 替换为 -_
  • 再取出字符串尾部的 =
php 复制代码
function base64url_encode($data) {
	return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}

URL 安全的 Base64 解码:

  • 先给要解码的字符串尾部补充 =
  • 再将 -_ 替换为 +/
  • 最后进行 base64 解码。
php 复制代码
function base64url_decode( $data ){  
  return base64_decode( strtr( $data, '-_', '+/') . str_repeat('=', 4 - strlen( $data ) % 4 ));  
}

参考

相关推荐
Giser探索家31 分钟前
遥感卫星升轨 / 降轨技术解析:对图像光照、对比度的影响及工程化应用
大数据·人工智能·算法·安全·计算机视觉·分类
全栈工程师修炼日记1 小时前
ARMv8系统的安全性(二):TrustZone架构如何重塑移动设备安全生态
安全
嗨丶王哪跑1 小时前
网络安全主动防御技术与应用
运维·网络·安全·web安全
qq_252924193 小时前
PHP 8.0+ 编译器级优化与语言运行时演进
php·学习php·php入门
BingoGo4 小时前
现代 PHP8+ 实战特性介绍 Enums、Fibers 和 Attributes
后端·php
火白学安全5 小时前
《Python红队攻防脚本零基础编写:入门篇(一)》
python·安全·web安全·网络安全·系统安全
携欢5 小时前
PortSwigger靶场之Exploiting server-side parameter pollution in a REST URL通关秘籍
前端·javascript·安全
明月与玄武5 小时前
Linux 网络分析终极武器:Tcpdump 深度指南!
网络·php·tcpdump
JaguarJack6 小时前
现代 PHP8+ 实战特性介绍 Enums、Fibers 和 Attributes
后端·php
好家伙VCC6 小时前
**发散创新:渗透测试方法的深度探索与实践**随着网络安全形势日益严峻,渗透测试作为评估系统安全的
java·python·安全·web安全·系统安全