破解爬虫过程中遇到的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 条评论
登录 后参与评论

相关文章

来自专栏牛客网

51信用卡前端凉面

1440
来自专栏进击的程序猿

The Clean Architecture in PHP 读书笔记(二)

设计模式是对软件中通用问题的总结,有了设计模式,方便我们进行交流,譬如一说MVC,我们就知道是怎么回事了,不然我们必须巴拉巴拉一大堆话去描述,不易于传播、交流,...

664
来自专栏用户2442861的专栏

Qt5之QRadioButton

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

1832
来自专栏安恒网络空间安全讲武堂

护网杯REFINAL——write up

根据前面的一些信息,判断出长度为0x30,经过如下设置,我们可以很快开始进行动态调试。

942
来自专栏lgp20151222

java与模式读后总结

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

682
来自专栏racaljk

关于llvm kaleidoscope: 记一次Debug血泪之路

简而言之,慎(bu)用(yong)全局变量!                                

871
来自专栏Kirito的技术分享

八个层面比较 Java 8, RxJava, Reactor

这是一篇译文,原文出处(http://alexsderkach.io/comparing-java-8-rxjava-reactor/)。其实很久以前我就看完了...

3116
来自专栏Kirito的技术分享

JAVA 拾遗--JPA 二三事

记得前几个月,spring4all 社区刚搞过一次技术话题讨论:如何对 JPA 或者 MyBatis 进行技术选型?传送门:http://www.spring4...

3679
来自专栏草根专栏

RxJS速成 (上)

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

2554
来自专栏个人分享

Flink单机版安装与wordCount

Flink为大数据处理工具,类似hadoop,spark.但它能够在大规模分布式系统中快速处理,与spark相似也是基于内存运算,并以低延迟性和高容错性主城,其...

921

扫码关注云+社区