作者:mobiledu2502879767 | 来源:互联网 | 2023-09-01 07:36
之前介绍了Cookies的Value,其中NickName是可以通过勾选ShowURLdecodedcheck_box去显示真正的内容。例如下图1的UserTok
之前介绍了 COOKIEs 的 Value, 其中 NickName 是可以通过勾选 "Show URL decoded " check_box 去显示真正的内容。例如下图1的 UserToken, 即使勾选了 check_box, 也不能显示原来的内容(以下称之为 “明文”) 。
其实Token这一串密文(为防止泄密,遮挡了部分密文) 是经过MD5加密算法得出的。MD5, 是指 Message Digest Algorithm 5,译为“消息摘要算法第5版” ,对输入信息生成唯一的128位散列值(32个字符),主要运用在数字签名、文件完整性验证以及口令加密等方面。理论上,根据输出的密文,不能得到原始的明文,即其过程不可逆。但现在的MD5已不再是绝对安全,通常黑客可以通过类似于穷举法的碰撞法去逆向破解出明文。
以明文 "abc123"举例,通过MD5加密得出密文为: “e99a18c428cb38d5f260853678922e03”,代码如下:
import hashlibhash = hashlib.md5()
hash.update("abc123".encode())
print(hash.hexdigest())
# 输出密文为: e99a18c428cb38d5f260853678922e03
通过碰撞法可以把密文 e99a18c428cb38d5f260853678922e03 还原成明文 “abc123” , 其中核心代码如下,还原的明文结果如 图2,可见破解时间大概为9秒左右,这破解速度是根据明文的复杂程度而定。
def decrypt_md5(md5_value): md5_value=md5_value.lower()for k in range(6,8):for item in permutations(all_letters,k):item=''.join(item)print('.',end='')if md5(item.encode()).hexdigest()==md5_value:return item
为防止密文被破译,在密码学中,可以通过 “加盐(Salt)” 的方法,那就是在明文的固定位置插入随机串,然后再进行MD5先加密,后乱序:先对明文进行MD5,然后对加密得到的MD5串的字符进行乱序,黑客就算攻破了数据库,也无法解密出正确的明文。以初始密码 123456为明文,随机 加 Salt 为 HNNJJjjmjfsdkmfkdd,代码如下, 通常加 Salt 多重加密,要把密文破译为正确的明文,机率非常低。
因此,在公共地方,千万不要连接陌生的 wifi 或者登录一些重要的账号密码,尤其涉及金钱的网站。除了MD5加密,还有其它更加安全的非对称性加密方法,例如RSA,SHA,下一期再逐一介绍在反爬虫的主要应用。
from hashlib import md5password = '123456' # 加密后需拼接的 salt, random添加,安全性和长度成正比
salt = 'HNNJJjjmjfsdkmfkdd'def sign1():m = md5()m.update(password.encode('utf8'))sign1 = m.hexdigest()return sign1def sign2():m = md5()m.update((sign1() + salt).encode('utf8'))sign2 = m.hexdigest()return sign2print(sign2())
图1
图2