吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 811|回复: 1
收起左侧

[求助] JavaScript中base64编码和python base64编码不一致的问题

[复制链接]
凌风神舞 发表于 2023-2-23 18:07
本帖最后由 凌风神舞 于 2023-2-23 18:08 编辑

我在调试的时候, 遇到了一段如下的JavaScript代码

function func_js(e) {
    for (var t = r, n = e.slice(0, 32), o = e.slice(-16), a = e.slice(32, -16), i = "", c = 0; c < a.length; c += 2)
        i += String.fromCharCode(parseInt(a.slice(c, c + 2), 16));
    return btoa(i)
};

然后我用python改写了一下

def func_py(e):
    n = e[:32]
    o = e[-16:]
    a = e[32:-16]
    i = ""
    for c in range(0, len(a), 2):
        i += chr(int(a[c:c+2], 16))
    return base64.b64encode(i.encode('utf-8')).decode('utf-8')

但是我发现两者运行的结果不一致(js是在浏览器控制台运行的), 但我发现如果我不进行base64编码, 直接返回i, 两者的结果是一致的

我用的样例字符串是

c3bc2823a1854022b8fc6b9f13d0fe20021769788b8c106e1c680da889e1a2be6062afefab6815126470189cbdc5ee57305d86eec6614620

使用js编码得到的是

'AhdpeIuMEG4caA2oieGivmBir++raBUSZHAYnL3F7lc=', 

不编码得到的i是

'\x02\x17ix\x8B\x8C\x10n\x1Ch\r¨\x89ᢾ`bˉï«h\x15\x12dp\x18\x9C½ÅîW'

使用python编码得到的结果是

'AhdpeMKLwowQbhxoDcKowonDocKiwr5gYsKvw6/Cq2gVEmRwGMKcwr3DhcOuVw=='

不编码得到的i是

'\x02\x17ix\x8b\x8c\x10n\x1ch\r¨\x89ᢾ`bˉï«h\x15\x12dp\x18\x9c½ÅîW'

请各位大佬帮忙看下, 谢谢了

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 凌风神舞 发表于 2023-2-23 18:46
本帖最后由 凌风神舞 于 2023-2-23 18:48 编辑

在网上找到答案, 是编码的问题, 希望可以帮助到其他人

btoa和atob是window对象的两个函数,其中btoa是binary to ASCII,用于将binary的数据用ASCII码表示,即Base64的编码过程,
而atob则是ASCII to binary,用于将ASCII码解析成binary数据,即Base64的解码过程[1]

ASCII码大家基本都知道,这里讲下binary是什么。

binary 是JS字符集的另外一个子集,它类似于 ASCII 字符集,但是字符的码点(charCode)不再限制到 127, 它包含了255 以内的字符。
binary string设计的目的不是用于代表字符, 而是代表二进制数据。
由 binary string 代表的二进制数据大小是原始数据的两倍,然而这对于最终用户是不可见的, 因为JavaScript strings 的长度是以2字节为单位进行计算的。
比如, “Hello world” 这个字符串属于 ASCII 子集, 而 àèìòù 不属于ASCII码[2],但属于binary。

所以btoa和atob其实还涉及了编码问题,我们只需要找出相同编码进行替换即可。
在node.js环境中,提供了一个 Buffer 类,用于操作二进制及Base64转码。
而在Python环境中,有一个 Latin1 编码[3]与JS的binary相同,因此可以构造代码了。

解决方案

 s = base64.b64encode("待编码的字符".encode("latin1")).decode("utf8")
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-23 00:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表