base64 - 将 Base64 转换为 Hex 混淆
问题描述
我正在研究将base64转换为十六进制的问题,问题提示以示例为例:
3q2+7w==
应该产生deadbeef
但是,如果我手动执行此操作,则使用 base64 数字集ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
我会得到:
3 110111
q 101010
2 110110
+ 111110
7 111011
w 110000
作为二进制字符串:
110111 101010 110110 111110 111011 110000
分成四组:
1101 1110 1010 1101 1011 1110 1110 1111 0000
十六进制
d e a d b e e f 0
所以不应该deadbeef0
和不应该deadbeef
吗?或者我在这里错过了什么?
解决方案
Base64 用于编码字节(8 位)。
您的 base64 字符串有 6 个字符加上 2 个填充字符 ( =
),因此理论上您可以编码 6*6bits = 36 位,这将等于 9 个 4bit 十六进制数。但实际上你必须以字节为单位思考,然后你只有 4 个字节(32 位)的重要信息。必须忽略剩余的 4 位(额外的“0”)。
您可以将无意义的位数计算为:
y : insignificant bits
x : number of base64 characters (without padding)
y = (x*6) mod 8
所以在你的情况下:
y = (6*6) mod 8 = 4
因此,您需要忽略最后的 4 个微不足道的位。
推荐阅读
- javascript - .filter(i => i) 在这种情况下做什么?
- blazor - Blazor 按钮单击事件连线
- visual-studio - 卡巴斯基防病毒软件阻止 Windows 的 Visual Studio 稳定版本下载
- mysql - 为什么当数据类型匹配时外键会给我一个错误
- function - 使用任何值类型的映射作为函数参数?
- docker - Mac 上的“docker system df”和 Docker Desktop 之间的不一致
- javascript - Selenium Explicit/Fluent 等到安装服务工作者
- c# - 安装 ReCaptcha V2 服务器端 C Sharp 的问题
- java - 使用 setter/getter 从其他类访问数组属性
- python - 尝试优化读取非常大的 SQLite 数据库