不少网页的email地址出于防止收到垃圾邮件的目的,JS脚本里对email做加密保护,仅当在加载页面时才通过JS脚本解密再渲染出来。查看网页源代码可以发现关键词往往是cfemail,其后是一大串十六进制的字符串。解密的算法主要是异或运算,将加密的十六进制字符串头两位作为异或运算的密钥,然后将其余的字符串每两个字符为一组,与密钥异或运算再还原为ASCII字符。用Python可以按此算法写出解密的代码。
例一:解密email地址
def decry_email(str):
key = int(str[:2], 16) # 取头两位字符串为密钥
ll=''
for i in range(2, len(str), 2): # 遍历其余字符串,每两位字符串与密钥进行异或运算
ll += chr(int(str[i:i+2], 16) ^ key)
return ll
测试运行结果:
加密email的过程就倒过来。头两位作为密钥,这两位字符串可以任意字符,然后将email各个字符与密钥进行异或运算。
例二:加密email地址
import random
def encry_email(str):
key = random.randint(1, 256) # 随机生成一个值为1~255的ASCII字符作为密钥
ll='{:02x}'.format(key) # 生成两位十六进制字符串
for i in str: # 遍历email各位字符进行异或运算
ll+='{:02x}'.format(ord(i)^key)
return ll
测试运行结果: