想问一下这种字符串是 base64 吧?为何解码后乱码啊?是我解的有问题还是这个不是 base64

2022-11-23 02:03:01 +08:00
 timedivision
studyTime: 
nxcUhOHtnq8U5OiQFRyVIQ==
lessonLocation: 
KuT9XK4MVaizQbjef2R+ug==

studyTime: 
0oA/lBN+vUvGhhYXmElIlQ==
lessonLocation: 
TlUnVu8KwPj09tCjakR66Q==

studyTime: 
XU7cDi+6eAuZvwFTaHHFzw==
lessonLocation: 
BRpMW/INcTNMp4c80DWX4g==

studyTime: 
0ZdZgweOU9CM7MhzBvGExw==
lessonLocation: 
z6QsH/c/vXJA19zpRqak/w==
4624 次点击
所在节点    程序员
38 条回复
liuguang
2022-11-23 13:35:57 +08:00
你见过 ssl 证书吗?也是 base64 编码的。base64 只是把二进制数据编码为可读的字符串,并没有说这些二进制数据一定是字符串。
shawndev
2022-11-23 13:41:26 +08:00
base64 decode, 输入是 string ,输出是 bytes ,从来没有说过输出一定是一个有效的字符串啊。

如果你关心的是为什么不是所有 bytes 都能解码为字符串( ASCII, UTF-8 )那就是另一个问题了。
jiangzm
2022-11-23 13:45:43 +08:00
@ElmerZhang 用 hash 数据传字段值吗, 这么牛
icegaze
2022-11-23 13:46:07 +08:00
@julyclyde 1995 年 1996 年吧,基本上邮件很少有直接发到对方服务器的,多多少少会经过中间邮件服务器中转,只要有一个服务器是 7bit 的,就会发生错误,,,所以非 ASCII 的文件,习惯于自己先编码一下,放在邮件 body 里,这样安全些。
itskingname
2022-11-23 13:49:56 +08:00
任何二进制信息都能编码成 Base64.图片也可以。所以并非所有 Base64 解码后都能得到字符串。
thinkershare
2022-11-23 14:05:34 +08:00
base 64: encode: bytes ==> string decode: string==> bytes
byte 里面是什么,只有天知道, 或者瞎猜, 使用各种 encoding 尝试解码, 只是因为大部分字符串编码都兼容 ASCII, 所以解码出来的 bytes[]恰好可以直接和 Unicode 16 的字符串匹配,纯粹就是一个巧合。JavaScript 原来没有原生的 UInt8Array , 使用了 string 来表示了 byte[],所以 btoa 就是不支持中文(因为中文的 Unicode 并没有办法直接对应到 byte[]), 你找个强类型语言,你会发下输入都是 byte[], 解码后也是 byte[], 至于 byte[]里面的内容,只有创建人清楚。
ElmerZhang
2022-11-23 14:26:16 +08:00
@jiangzm 因为所有值的长度都一样是 32 位,而且随机性比较强,所以猜测是 hash 过的。当然也有可能是自创了什么加密算法,那就很厉害了。
ElmerZhang
2022-11-23 14:29:20 +08:00
@jiangzm 另外,如果是选课系统的话,lessonLocation 和 studyTime 的值实际都是有限的,可枚举的,所以提前 hash 一下再传输也是有可能的,不过这样的话前端肯定会还会有一次「字典请求」来把 hash 和展示的值对应起来。
julyclyde
2022-11-23 16:02:50 +08:00
@icegaze 啊?都经过哪些中间服务器了?
现在除了反垃圾网关,基本上都是直达吧
JohnBull
2022-11-23 16:10:06 +08:00
@icegaze 你暴露年龄了! 用 uuencode 的人都悄咪咪不说话
jiangzm
2022-11-23 16:14:13 +08:00
@ElmerZhang lessonLocation 和 studyTime 原始数据长度应该一样,才可能加密后数据长度一样
lessonLocation 两个经纬度值
studyTime 两个时间戳
whoami9894
2022-11-23 16:28:01 +08:00
@ElmerZhang 百度一下分组加密的 padding
icegaze
2022-11-24 22:56:09 +08:00
@julyclyde ^_^ 现在是的呀,都直接和对端 smtp 服务器连接的,,,我小时候那大多是经过好几个服务器中转的…>_<
icegaze
2022-11-24 22:57:01 +08:00
@JohnBull and ,还有用电话线下载上传 FIDO 的 BBS……^_^
julyclyde
2022-11-25 08:42:51 +08:00
@icegaze 你小时候,当时他们域名是怎么指向的?把自家域名 MX 指向别人?
那个域名自己的邮件服务器不上公网吗?
julyclyde
2022-11-25 08:43:11 +08:00
@icegaze FIDO 我也玩过,不过我当时的软件不支持 ZMODEM 所以只能看文字不能下载压缩包
icegaze
2022-11-25 21:09:54 +08:00
@julyclyde

哈哈哈,不是的,
当年的邮件服务器,域名是和现在一样的,也是能解析到 ip 地址… 但是 smtp 通常无法直接在两个远程 ip 之间通讯(我也不知道为啥),一般是经过中间的几个公共服务器中转,每次中转都会在邮件的头 head 里留下一些信息… 然后你收到邮件的时候就能看到这封邮件都经过了哪些地方,还挺好玩的。
julyclyde
2022-11-27 12:48:42 +08:00
@icegaze 我当然知 Received header
但我问的是:如何指示这个路径
SMTP 就是靠 MX 记录的,除了反垃圾网关,还真存在过别的指法么?
难道你用过 UUCP ?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/897218

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX