URL 安全的 Base64 编码

什么是 Base64 编码?

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

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

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

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

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

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

URL 安全的 Base64 编码

由于标准的 Base64 编码之后可能出现字符 + 和 / ,这样在 URL 中就不能直接作为参数,所以 URL 安全的 Base64 编码,需要把字符 + 和 / 分别变成 - 和 _,另外 = 字符也可能出现在 Base64 编码中,但 = 用在 URL 和 Cookie 里面会造成歧义,所以,很多 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 ));  
}

参考

相关推荐
郑州光合科技余经理16 分钟前
出海外卖平台:支付对接为什么要和下单收款分开
android·java·开发语言·前端·后端·php·ai编程
谢亮_vipxieliang27 分钟前
PHP 异常处理全解析:try-catch、自定义异常与全局异常处理器
开发语言·php
终端安全笔记35 分钟前
配置锁状态那一栏查的是什么:报告里几项各自指向什么风险
android·前端·安全·ios
JaguarJack1 小时前
免费可商用 PHP 管理后台 CatchAdmin V5.4.1 发布,新增 MCP 支持
后端·php·laravel·服务端
是真的小外套1 小时前
第19章:操作系统安全防护
安全
BingoGo1 小时前
免费可商用 PHP 管理后台 CatchAdmin V5.4.1 发布,新增 MCP 支持
后端·php
谢亮_vipxieliang1 小时前
多智能体系统的“TCP/IP时刻”:MCP与A2A协议如何定义Agent时代
网络·tcp/ip·ai·php
山东科恩光电1 小时前
安全触边缓冲防撞技术原理及其在AGV与工业移动设备中的应用解析
安全
cleble1 小时前
怎么用用 PowerShell 下载文件
开发语言·php
EasyGBS10 小时前
摄像头还在线,画面已经不能用了?国标GB28181视频平台EasyGBS视频质量诊断怎么用
服务器·安全·音视频