反反爬的主要思路->尽可能的去模拟浏览器对服务器发起请求,浏览器中认为如何操作,代码中就如何去实现。
例如:浏览器中先请求了url1,然后获取到服务器返回的cookie保存在本地,然后再去请求url2,此时就会带上url1返回的cookie进行请求,如果没有携带这个cookie就会请求失败
正常情况下,浏览器会自动运行服务器返回的js代码,然后将js代码执行后的结果进行渲染后显示在浏览器中,所以,就目前市场上存在的网站而言,基本上99%的网站的页面都是经过了js渲染之后的结果。
Hash,译做“散列”,也有直接音译为“哈希”的。把任意长度的输入,通过某种hash算法,变换成固定长度的输出,该输出就是散列值,也称摘要值。该算法就是哈希函数,也称摘要函数。
MD5的固定长度为128比特,16字节,通常用他的16进制字面值输出他,是一个长度为32位的字符串。
MD5是一种被广泛使用的线性散列算法,能够产生一个128位(16字节)的散列值(hash),用于确保信息传输完整的一致性。并且MD5加密之后产生的是一个固定长度(32位或16位)的数据。
正常情况下MD5是不存在解密的。但是理论上MD5是可以进行反向暴力破解。暴力破解的大致原理就是试用大量的不同数据来加密之后跟已有的加密数据进行对比。但是,暴力破解所消耗的成本是特别大的,所以正常情况没有人愿意去暴力破解一个MD5加密的密码。
Python中MD5加密的使用
"""
md5加密的介绍
123 》 qwere
明文 》 密文
1212121 》 qwere
md5特点:
密文长度固定
不能够反解析
"""
import hashlib
a = '123'
# hexdigest将MD5 hash值转换为16进制数字字符串
print(hashlib.md5(a.encode()).hexdigest())
a = '123qwqwqwqw'
# hexdigest将MD5 hash值转换为16进制数字字符串
print(hashlib.md5(a.encode()).hexdigest())
md5在线解密: https://www.cmd5.com/
一些简单的密文可以通过工具解密出来,但是复杂的就无法解密
因为加密过程会出现损失
从原来的H§编程了H(p+salt),相当于哈希函数H发生了变化,每次哈希计算使用的salt是随机的,如果H发生了改变,则已有的表数据就完全无法使用,必须针对特定的H重新生成,这样就提高了破解的难度。
import hashlib
a = '123' # 密码 123 > qwe 123a > qwer
b = a + 'qwerty'
res_a = hashlib.md5(b.encode()).hexdigest()
print(res_a)
Base64是一种用64个字符来表示任意二进制数据的方法。base64是一种编码方式而不是加密算法,只是看上去像是加密而已。
Base64使用A-Z,a-z,0-9,+,/这64个字符实现对数据的加密
加密步骤:
"""
加密方式 -- base64
可以反解析 解密
"""
import base64
a = '123'
b = '123456789'
c = '456789'
# b64encode 加密
res_a = base64.b64encode(a.encode()).decode()
res_b = base64.b64encode(b.encode()).decode()
res_c = base64.b64encode(c.encode()).decode()
print(res_a)
print(res_b)
print(res_c)
"""
/017-代码/lx_07_base64加密.py
MTIz
MTIzNDU2Nzg5
NDU2Nzg5
"""
"""
反解析
"""
a = 'MTIz'
b = 'MTIzNDU2Nzg5'
c = 'NDU2Nzg5'
# b64decode 解密
res_a = base64.b64decode(a.encode()).decode()
res_b = base64.b64decode(b.encode()).decode()
res_c = base64.b64decode(c.encode()).decode()
print(res_a)
print(res_b)
print(res_c)
那么如果在网站中遇到了反爬手段需要我们去逆向的话思路应该如何去进行解决呢?下一章节开始,我们将由简单到复杂为大家带来几个js逆向的经典案例!