Heim >Backend-Entwicklung >Python-Tutorial >Inventar gängiger Verschlüsselungsalgorithmen, die in 90 % der Python-Crawler verwendet werden
Ich glaube, dass Sie bei der Datenerfassung auf viele verschlüsselte Parameter wie „Token“, „Signatur“ usw. stoßen. Heute führt Sie der Editor dazu, während des Datenerfassungsprozesses eine Bestandsaufnahme dieser Parameter vorzunehmen. Mainstream-Verschlüsselungsalgorithmen, welche Eigenschaften haben sie, welche Verschlüsselungsmethoden gibt es usw. Diese zu kennen, wird uns bei der umgekehrten Dekodierung dieser Verschlüsselungsparameter eine große Hilfe sein!
Das erste, was wir verstehen müssen, ist: Was sind Verschlüsselung und Entschlüsselung? Wie der Name schon sagt
Die Operationen von Verschlüsselungs- und Entschlüsselungsalgorithmen werden normalerweise unter der Kontrolle eines Schlüsselsatzes durchgeführt, bei dem es sich jeweils um den Verschlüsselungsschlüssel (Verschlüsselungsschlüssel) und den Entschlüsselungsschlüssel (Entschlüsselungsschlüssel) handelt, wie in der folgenden Abbildung dargestellt:
Verschlüsselungsalgorithmen werden in symmetrische Verschlüsselung, asymmetrische Verschlüsselung und Hashing-Algorithmen unterteilt, darunter
import base64 # 想将字符串转编码成base64,要先将字符串转换成二进制数据 url = "www.baidu.com" bytes_url = url.encode("utf-8") str_url = base64.b64encode(bytes_url)# 被编码的参数必须是二进制数据 print(str_url)Ebenso können wir ihn auch dekodieren, der Code lautet wie folgt:
b'd3d3LmJhaWR1LmNvbQ=='
url = "d3d3LmJhaWR1LmNvbQ==" str_url = base64.b64decode(url).decode("utf-8") print(str_url)Ausgabe:
www.baidu.comWie oben erwähnt, kann die MD5-Verschlüsselung mit Brute-Force geknackt werden, um ihre Sicherheit zu verringern. Daher werden wir während des eigentlichen Vorgangs eine Salt- oder doppelte MD5-Verschlüsselung hinzufügen, um sie zu erhöhen Zuverlässigkeit. Der Code lautet wie folgt:
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())
而至于填充这一概念,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加密算法的实现过程,基本上也都是大同小异的,由于篇幅有限,今天暂时就先介绍到这里,后面要是大家感兴趣的话,会去分享一下其他加密算法的实现原理与特征。
Das obige ist der detaillierte Inhalt vonInventar gängiger Verschlüsselungsalgorithmen, die in 90 % der Python-Crawler verwendet werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!