破解爬虫过程中遇到的Email地址信息加密

1、问题来源

在数据采集过程中,经常有需要采集各种联系方式,其中就包括电子邮箱地址。一些毫不设防的网站的电子邮件地址可以直接从网页源码中获取到,而一些稍微有点防备爬虫意识的网站会将电子邮箱中的@符号替换为#号:

最近工作中,遇到一种之前从未遇到过的电子邮箱加密方式。在审查元素的时候能够获取到正确的数据:

查看网页源码的时候,也能够定位到相应的元素:

但是从上图中,可以发现,其对应于显示电子邮箱的位置,显示的是一个“[email protected]”的链接,我们查看一下源码:

这个显示电子邮箱的字段与显示其他文字的结构不一样,如果是非电子邮箱数据,则没有a链接;如果是电子邮箱数据,那么则是通过这个a链接在网页前端中显示出数据。

2、解决方法

通过一番搜索,在百度知道中发现了其原理和解决思路:

只是简单的异或运算加密,解密起来并不困难。

3、Python实现

通过这位大神的解决思路,我们可以很快速地使用Python写一个解密电子邮箱的函数。

首先提取出真实邮箱地址的加密数据:

处于隐私考虑,在此使用百度知道上公开的电子邮箱的加密字符串

import re
from urllib.parse import unquote

email_str = '71121003141403311a140210051e5f121e1c'

然后将这个加密数据两两分割为一个列表:

email_list = re.findall(r'.{2}',email_str)

提取出加密字符串的密钥,即字符串的前两个字符:

key = email_list[0]

定义一个空列表,用于存储十六进制异或运算的结果:

ll = []

对剩余的加密字符串进行遍历,在遍历中与密钥进行异或运算,结果添加到ll列表中:

for e in email_list[1:]:
        # 对十六进制进行异或运算
        r = hex(int(key,16) ^ int(e,16))
        ll.append(r)

接着对列表中的结果进行字符串拼接和替换:

# 拼接运算后的字符串
    a = ''.join(ll)
    # URL解码字符串
    email = unquote(a.replace('0x','%'))

这样,email的值就是加密字符串的真实电子邮箱地址:

是不是很简单?有更好的方法欢迎留言分享:)

原文发布于微信公众号 - 州的先生(zmister2016)

原文发表时间:2018-05-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏用户2442861的专栏

Qt5之QRadioButton

本例程介绍QRadioButton的使用,包括QRadioButton的分组、多个QRadioButton控件响应同一个槽函数、QRadioButton的ID...

3702
来自专栏草根专栏

RxJS速成 (上)

What is RxJS? RxJS是ReactiveX编程理念的JavaScript版本。ReactiveX是一种针对异步数据流的编程。简单来说,它将一切数据...

2804
来自专栏牛客网

51信用卡前端凉面

1590
来自专栏GreenLeaves

C# 多线程五之Task(任务)

为什么MS要推出Task,而不推Thread和ThreadPool,以下是我的见解:

1181
来自专栏WindCoder

异步JavaScript:从回调地狱到异步和等待

这是一个典型的异步编程挑战,您如何选择处理异步调用,在很大程度上,会导致或破坏您的应用程序,并且可能是您的整个启动。

3991
来自专栏小樱的经验随笔

CTF---密码学入门第二题 我喜欢培根

我喜欢培根分值:20 来源: Ph0enix 难度:中 参与人数:3449人 Get Flag:1410人 答题人数:1653人 解题通过率:85% key...

3224
来自专栏一个会写诗的程序员的博客

《Kotlin 反应式编程》使用 RxKotlin 实现一个极简的 http DSL ( Reactive Programming Using Rx Kotlin )《Kotlin 反应式编程》使用

我们现在已经基本知道 Kotlin 中 DSL 的样子了。但是这些 DSL 都是怎样实现的呢?本节我们就通过实现一个极简的http DSL来学习创建 DSL 背...

1692
来自专栏深度学习自然语言处理

【收藏】这些Python代码技巧,你肯定还不知道

人们还经常把 Python 笑称为「可执行伪码(executable pseudocode)」。但是,当你可以编写这样的代码时,很难去反驳这种言论:

663
来自专栏星汉技术

Scala简介和安装

2896
来自专栏lgp20151222

java与模式读后总结

老规则边看边写书上的代码,磨磨蹭蹭三个多星期终于把一本1000+的java与模式看完了。

892

扫码关注云+社区