データをキャプチャするとき、「トークン」や「署名」などの多くの暗号化されたパラメーターに遭遇すると思います。今日は、これらのパラメーターの棚卸しを行います。データ キャプチャ プロセスにおける主流の暗号化アルゴリズム、その特徴、暗号化方法などを理解することは、暗号化されたパラメータを逆解読するのに非常に役立ちます。
最初に理解する必要があるのは、暗号化と復号化とは何なのかということです。名前が示すように、
暗号化アルゴリズムと復号化アルゴリズムの操作は、通常、以下に示すように、それぞれ暗号化キー (暗号化キー) と復号化キー (復号化キー) である一連のキーの制御下で実行されます。表示:
暗号化アルゴリズムは、対称暗号化、非対称暗号化、およびハッシュ アルゴリズムに分類されます。そのうち
import base64 # 想将字符串转编码成base64,要先将字符串转换成二进制数据 url = "www.baidu.com" bytes_url = url.encode("utf-8") str_url = base64.b64encode(bytes_url)# 被编码的参数必须是二进制数据 print(str_url)
b'd3d3LmJhaWR1LmNvbQ=='
url = "d3d3LmJhaWR1LmNvbQ==" str_url = base64.b64decode(url).decode("utf-8") print(str_url)
www.baidu.com
import hashlib str = 'this is a md5 demo.' hl = hashlib.md5() hl.update(str.encode(encoding='utf-8')) print('MD5加密前为 :' + str) print('MD5加密后为 :' + hl.hexdigest())
MD5加密前为 :this is a md5 demo. MD5加密后为 :b2caf2a298a9254b38a2e33b75cfbe75
# post传入的参数 params = "123456" # 加密后需拼接的盐值(Salt) salt = "asdfkjalksdncxvm" def md5_encrypt(): m = md5() m.update(params.encode('utf8')) sign1 = m.hexdigest() return sign1 def md5_encrypt_with_salt(): m = md5() m.update((md5_encrypt() + salt).encode('utf8')) sign2 = m.hexdigest() return sign2
而至于填充这一概念,AES的分组加密的特性我们需要了解,具体如下图所示:
简单来说,AES算法在对明文加密的时候,并不是把整个明文一股脑儿地加密成一整段密文,而是把明文拆分成一个个独立的明文块,每一个明文块的长度为128比特。
这些明文块经过AES加密器的复杂处理之后,生成一个个独立的密文块,将这些密文块拼接到一起就是最终的AES加密的结果了。
那么这里就有一个问题了,要是有一段明文的长度是196比特,如果按照每128比特一个明文块来拆分的话,第二个明文块只有64比特了,不足128比特该怎么办呢?这个时候就轮到填充来发挥作用了,默认的填充方式是PKCS5Padding以及ISO10126Padding。
不过在AES加密的时候使用了某一种填充方式,解密的时候也必须采用同样的填充方式。
AES的工作模式,体现在了把明文块加密成密文块的处理过程中,主要有五种不同的工作模式,分别是CBC、ECB、CTR、CFB以及OFB模式,同样地,如果在AES加密过程当中使用了某一种工作模式,解密的时候也必须采用同样地工作模式。最后我们用Python来实现一下AES加密。
import base64 from Crypto.Cipher import AES def AES_encrypt(text, key): pad = 16 - len(text) % 16 text = text + pad * chr(pad) text = text.encode("utf-8") encryptor = AES.new(key.encode('utf-8'), AES.MODE_ECB) encrypt_text = encryptor.encrypt(text) encrypt_text = base64.b64encode(encrypt_text) return encrypt_text.decode('utf-8')
或者大家也可以看一下网上其他的AES加密算法的实现过程,基本上也都是大同小异的,由于篇幅有限,今天暂时就先介绍到这里,后面要是大家感兴趣的话,会去分享一下其他加密算法的实现原理与特征。
以上がPython クローラーの 90% で使用される一般的な暗号化アルゴリズムのインベントリの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。