1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > \x75\x73\x65\x20\x73\x74\x72\x69\x63\x74解码

\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74解码

时间:2021-06-24 04:09:24

相关推荐

\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74解码

这是js代码加密的一种,其实就是用字节代替了字符。

比如说"\x65",由于\x的存在(\x代表这是一个16进制,而一位十六进制代表了四位二进制,所以这里两位十六进制代表了8位二进制,也就是说这代表一个字节),它会被认为是一个十六进制数代表的字符,用utf8解码时代表字符e,解码的过程是,把65从十六进制转为十进制,然后的到一个0-128的数,然后这个数对应英文字符中的一个字符(在utf8中英文字符使用一个字节表示的,也就是用0到128表示),而在js代码中实际显示的是"\x65",\代表字符\,这样\就失去了作用,也就不会认为\x65是代表一个字节了,那么\x65也就不能被翻译成"e"了。

在python中测试如下:

运行时会默认用utf8解码,而对"\x65"解码得到的就是字符e

由于使用了\,所以\就代表一个普通的字符,只有\x出现时才是代表这是个十六进制表示的字符,而\x只是表示字符\和字符x,并没有别的意义,所以不会解码。

ok,解码其实很简单,我们看到的是\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74这个样子,复制粘贴之后还是这个样子,我们只要粘贴到console中,或者向上边在python中print打印一下就可以看出正确的字符。

那么,这篇文章要干什么???

对,你看到的是这样的,你手动复制下来也是这样的,但是如果你用requests下载页面后就不是这个样子了。

这是某网站加密后的js代码,

我想要提取其中一个变量,用正则表达式匹配后的得到的结果是这样的。

得到的结果把\x63都变成了\x63,我就没办法得到真正的字符了。处理方法是再把\变成\,但是要怎么做呢,replace("\",""),这样显然不行,那么这里就卡住了。

可以用别的方法转换,这里用字节表示字符,不过这个字节不是真正的字节,而是字节的字符化(乱),print("\x63")得到输出结果"\x63",他整体是一个字符串,而我们想要的是"\x63"代表的字符。

63是一个十六进制数,那么把他转换成十进制,然后再转换成字节呢。

先讲讲python中的bytes,如果这个函数传入的是一个列表[],那么会对列表中的整数用字节表示,而用字节表示就符合了要求,\x63对63从十六进制转十进制变成

在把99放到到列表中,再用bytes转成字节,

可以看到,这个时候就能得到正确的字符了。

总过程:

“\63” 提取数字63

a = int(“63”,16)

bytes(a)

bytes(a).decode(‘utf8’)

然后得到"c"(就是"\x63")

总结:其实解决了"\x63"向"\x63"的转换,这种转换用replace是不能完成的(由于字符\的特殊性)。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。