Python调用Node.js解密Cloudflare邮箱加密字符串
本文介绍在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邮箱加密问题的完整方案,希望对相关开发者有所帮助。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













