Skip to content

Instantly share code, notes, and snippets.

@zhengkai
Last active October 18, 2024 10:29
Show Gist options
  • Save zhengkai/5079640d5fd5c1b2806de8512ba5e89a to your computer and use it in GitHub Desktop.
Save zhengkai/5079640d5fd5c1b2806de8512ba5e89a to your computer and use it in GitHub Desktop.
base64 fix

我发现 xxx 这边用 base64 的方式用错了

我离xx组之前,跟某A对一个接口,当时他就给我这种错误的方式,我当时就那一个接口,我让他改了,但是他没能明白我说的什么意思,我今天是给某B那边做东西才发现所有接口都是这种方式

就是咱们用 hex 表达的时候,其实是两个字符对应一个字节,比方说单个字母 A41Z5A,空格是 20

所以 md5 用 hex 表达是 32 个字节,但其实二进制(binary)形式是 16 个字节

base64 比 hex 紧凑些,不是二倍而是大约 4/3(1.33)倍

比如 12 个字母 A binary 就是 12 个 A,AAAA... 占 12 字节
hex 形式,就是 41414141... 占 24 个字节
base64 形式,是 QUFBQUFBQUFBQUFB,总共 16 个字节,比 hex 短,比 12 个 A 长

咱们的签名,是 sha256 的 base64,我理解这个是为了更短,但弄错了,把 sha256 的 hex 形式给 base64 了,结果这个字符串比 sha256 更长,但是实际跟 sha256 等价的,结果只是增加了麻烦

举个例子

有个 sha256 是 d0772abc3d9adb7ddfa3bdc498aaac92b7a6fc6954744deff6fe9ffb723937c7
正确的 base64 是 0HcqvD2a233fo73EmKqskrem/GlUdE3v9v6f+3I5N8c=,比原始的短
目前错误的 base64 是 ZDA3NzJhYmMzZDlhZGI3ZGRmYTNiZGM0OThhYWFjOTJiN2E2ZmM2OTU0NzQ0ZGVmZjZmZTlmZmI3MjM5MzdjNwo=,长到离谱,非常奇怪

我希望能改成正确的 base64,前提是你能明白,你也能跟手下的人讲明白,如果不行,至少可以撤掉 base64,只用 sha256,起码不至于多费个事反而有更多麻烦

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment