想问一下这种字符串是 base64 吧?为何解码后乱码啊?是我解的有问题还是这个不是 base64 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
8888888888
V2EX    程序员

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

  •  
  •   8888888888 2022-11-23 02:03:01 +08:00 5669 次点击
    这是一个创建于 1105 天前的主题,其中的信息可能已经有所发展或是发生改变。
    studyTime: nxcUhOHtnq8U5OiQFRyVIQ== lessonLocation: KuT9XK4MVaizQbjef2R+ug== studyTime: 0oA/lBN+vUvGhhYXmElIlQ== lessonLocation: TlUnVu8KwPj09tCjakR66Q== studyTime: XU7cDi+6eAuZvwFTaHHFzw== lessonLocation: BRpMW/INcTNMp4c80DWX4g== studyTime: 0ZdZgweOU9CM7MhzBvGExw== lessonLocation: z6QsH/c/vXJA19zpRqak/w== 
    38 条回复    2022-11-27 12:48:42 +08:00
    GeruzoniAnsasu
        1
    GeruzoniAnsasu  
       2022-11-23 02:17:33 +08:00   2
    长度这么规整,原数据精确 128 位

    推测是 MD5
    JohnBull
        2
    JohnBull  
       2022-11-23 02:20:41 +08:00
    猜测应该是编码之前对称加密过了
    JohnBull
        3
    JohnBull  
       2022-11-23 02:22:34 +08:00   1
    @GeruzoniAnsasu 从 studyTime 和 lessonLocation 的字面上看,应该是明确的时间地点信息,应该是要取出来用的,应该不是 md5 ,而是某种加密算法
    dingwen07
        4
    dingwen07  
       2022-11-23 02:51:02 +08:00 via iPhone   1
    echo "nxcUhOHtnq8U5OiQFRyVIQ==" | base64 -d | xxd
    00000000: 9f17 1484 e1ed 9eaf 14e4 e890 151c 9521 ...............!

    完全看不出来这是什么
    msg7086
        5
    msg7086  
       2022-11-23 04:29:00 +08:00 via Android   6
    为什么 base64 解码后不能是乱码呢。
    dingwen07
        6
    dingwen07  
       2022-11-23 05:57:32 +08:00 via iPhone
    @msg7086 #5
    更值得问的问题是,不乱码的字符串,为什么要用 base64
    LykorisR
        7
    LykorisR  
       2022-11-23 07:14:22 +08:00   1
    可能是换表 base64 吧,你找找有没有新表
    chendy
        8
    chendy  
       2022-11-23 08:07:38 +08:00   2
    base64 解码是 string -> byte[]
    byte[] 不一定是字符串编码得到的,所以得不到字符串很正常
    icegaze
        9
    icegaze  
       2022-11-23 08:20:54 +08:00 via Android   2
    我小时候经常用 base64 把一些 exe 文件编码后作为邮件主体发送给对方…

    因为那时候对 BIN 的编码还在用 QP ,
    用 base64 效率更好些。

    所以,
    用 base64 编码的不一定是文本文字哦…
    geekvcn
        10
    geekvcn  
       2022-11-23 08:56:15 +08:00   1
    这是打算逃课吗?
    julyclyde
        11
    julyclyde  
       2022-11-23 08:58:54 +08:00   1
    如果原文是 human reabable 谁还去 base 啊……
    julyclyde
        12
    julyclyde  
       2022-11-23 08:59:30 +08:00
    @icegaze 小时候邮件服务器还 7bit 么?
    1997 年我调研的时候已经找不到这么旧的服务器了呢
    lanwairen123
        13
    lanwairen123  
       2022-11-23 09:58:31 +08:00   1
    用其他对称加密算法如 aes des rsa 等加密后用 base64 编码的
    Promtheus
        14
    Promtheus  
       2022-11-23 10:02:42 +08:00   1
    base64 只是为了序列化,用来传输。他的源头不一定是文本的
    8888888888
        15
    8888888888  
    OP
       2022-11-23 10:45:38 +08:00
    @geekvcn 问的没错,就是准备逃课,哈哈哈
    q8515620
        16
    q8515620  
       2022-11-23 12:34:11 +08:00 via Android
    逃课的话,解不出来不是更好吗?/doge
    someone120
        17
    someone120  
       2022-11-23 12:35:20 +08:00 via Android
    目测为 aes 加密,base64 应该不会出现 /和+的
    ElmerZhang
        18
    ElmerZhang  
       2022-11-23 12:44:59 +08:00
    看起来是 hash 过又 base64 的
    yolee599
        19
    yolee599  
       2022-11-23 13:03:04 +08:00 via Android
    base64 的功能不是只编码 ASCII ,而是编码 HEX 。
    locoz
        20
    locoz  
       2022-11-23 13:17:31 +08:00
    盲猜 AES 套 Base64 方便传输,不是 AES 的话大概率 DES 。
    liuguang
        21
    liuguang  
       2022-11-23 13:35:57 +08:00
    你见过 ssl 证书吗?也是 base64 编码的。base64 只是把二进制数据编码为可读的字符串,并没有说这些二进制数据一定是字符串。
    shawndev
        22
    shawndev  
       2022-11-23 13:41:26 +08:00
    base64 decode, 输入是 string ,输出是 bytes ,从来没有说过输出一定是一个有效的字符串啊。

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

    哈哈哈,不是的,
    当年的邮件服务器,域名是和现在一样的,也是能解析到 ip 地址… 但是 smtp 通常无法直接在两个远程 ip 之间通讯(我也不知道为啥),一般是经过中间的几个公共服务器中转,每次中转都会在邮件的头 head 里留下一些信息… 然后你收到邮件的时候就能看到这封邮件都经过了哪些地方,还挺好玩的。
    julyclyde
        38
    julyclyde  
       2022-11-27 12:48:42 +08:00
    @icegaze 我当然知 Received header
    但我问的是:如何指示这个路径
    SMTP 就是靠 MX 记录的,除了反垃圾网关,还真存在过别的指法么?
    难道你用过 UUCP ?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5249 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 07:48 PVG 15:48 LAX 23:48 JFK 02:48
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86