Python调用Node.js解密Cloudflare邮箱加密字符串

夏知夏
夏知夏
发布时间:2026-10-14 | 4人浏览过
原创

本文介绍在Python爬虫中遇到Cloudflare邮箱加密时的解决方案。通过分析前端JS代码,提取基于异或运算的解密逻辑,并使用Python的execjs库加载并调用该JS函数,成功还原加密后的邮箱地址,实现自动化采集。

Cloudflare邮箱加密现象分析

在近期开发爬虫项目时,目标是获取页面中的邮箱信息,但发现数据并非通过Ajax接口返回,而是无法正常直接获取。经过排查,确认该邮箱信息被Cloudflare进行了加密处理。既然存在加密机制,必然存在对应的解密方法。

参考了网络上的技术文章(https://www.jb51.net/article/189404.htm),从中获取了相关的加密与解密算法思路。

依据相关技术博主的说明,按照以下步骤进行实现即可:

博主“柠之漠然”指出:

该解密逻辑源自对前端JS代码的分析与转换。

其中核心处理逻辑如下:

for (e = ”, r = ‘0x' + a.substr(0, 2) | 0, n = 2; a.length – n; n += 2) e += ‘%' + (‘0' + (‘0x' + a.substr(n, 2) ^ r).toString(16)).slice( – 2);

JS解密算法核心逻辑

解密过程解析:首先取字符串前2位字符,转换为16进制数值作为密钥;随后从第3位开始,每2位字符与密钥进行异或(XOR)运算,结果转换为16进制字符串,再拼接百分号形成URL编码格式;最后将所有片段组合并解码,即可还原原始邮箱地址(例如 abc@abc.com)。

前端JS代码中使用了urlencode编码方式处理解密后的字符串。

以下是复现的JavaScript解密代码示例:

Python调用JS实现解密

接下来,在Python中通过execjs库调用上述JS代码,即可完成解密操作。


function jiemi(val) {
 for (e = '', r = '0x' + val.substr(0, 2) | 0, n = 2; val.length - n; n += 2) e += '%' + ('0' + ('0x' + val.substr(n, 2) ^ r).toString(16)).slice(-2); return decodeURIComponent(e)
}

以下是Python调用JS实现解密的完整代码:


import execjs

def get_js():
 # f = open("./../js/my.js", 'r', encoding='utf-8') # 打开JS文件
 f = open("./jiemi.js", 'r', encoding='utf-8') # 打开JS文件
 line = f.readline()
 htmlstr = ''
 while line:
  htmlstr = htmlstr+line
  line = f.readline()
 return htmlstr


def get_des_psswd(e):
 js_str = get_js()
 ctx = execjs.compile(js_str) #加载JS文件
 return (ctx.call('jiemi', e)) #调用js方法 第一个参数是JS的方法名,后面的data和key是js方法的参数


if __name__ == '__main__':
 print(get_des_psswd(e='30515253705152531e535f5d'))

以上即为利用Python结合Node.js环境解决Cloudflare邮箱加密问题的完整方案,希望对相关开发者有所帮助。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表