Heim  >  Artikel  >  Backend-Entwicklung  >  Inventar gängiger Verschlüsselungsalgorithmen, die in 90 % der Python-Crawler verwendet werden

Inventar gängiger Verschlüsselungsalgorithmen, die in 90 % der Python-Crawler verwendet werden

王林
王林nach vorne
2023-04-13 10:52:041814Durchsuche

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!

1. Grundlegender gesunder Menschenverstand

Das erste, was wir verstehen müssen, ist: Was sind Verschlüsselung und Entschlüsselung? Wie der Name schon sagt

  • Verschlüsselung: Der Prozess der Umwandlung von Klartextdaten in Chiffretext
  • Entschlüsselung: Der umgekehrte Prozess der Verschlüsselung, d. h. der Prozess der Wiederherstellung des ursprünglichen Klartextes aus Chiffretext.

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:

Inventar gängiger Verschlüsselungsalgorithmen, die in 90 % der Python-Crawler verwendet werden

Verschlüsselungsalgorithmen werden in symmetrische Verschlüsselung, asymmetrische Verschlüsselung und Hashing-Algorithmen unterteilt, darunter

  • Symmetrische Verschlüsselung: Das heißt, derselbe Schlüssel wird für die Ver- und Entschlüsselung verwendet, wie z. B. RC4, AES, DES und andere Verschlüsselungsalgorithmen
  • Asymmetrische Verschlüsselung: Das heißt, es werden unterschiedliche Schlüssel für die Verschlüsselung und Entschlüsselung verwendet, z. B. der RSA-Verschlüsselungsalgorithmus usw.
  • Hash-Algorithmus: Auch als Hash-Funktion bekannt. Erzeugt eine feste Ausgabe für Eingabenachrichten unterschiedlicher Länge, und der Ausgabewert ist der Hash-Wert. Base64-Pseudoverschlüsselung. Base64 ist kein reiner Verschlüsselungsalgorithmus, sondern nur eine Kodierungsmethode. Es werden 64 Zeichen verwendet. nämlich A-Z, a-z, 0-9, +, /, zum Kodieren von Daten und kann zum Übertragen längerer Identifikationsinformationen in einer HTTP-Umgebung verwendet werden. Die Base64-Kodierung ist nicht lesbar und muss dekodiert werden, bevor sie gelesen werden kann. Wir verwenden Python, um die Base64-Codierung für jede URL durchzuführen. Der Code lautet wie folgt:
  • 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=='

3 .MD5 Verschlüsselung

MD5 ist ein weit verbreiteter linearer Hash-Algorithmus, und die generierte Verschlüsselung besteht aus Daten fester Länge (32-Bit oder 16-Bit), bestehend aus Buchstaben und Zahlen, mit einheitlicher Groß- und Kleinschreibung. Die durch die endgültige Verschlüsselung erzeugten Daten sind irreversibel, was bedeutet, dass die ursprüngliche Zeichenfolge nicht einfach durch die verschlüsselten Daten wiederhergestellt werden kann, es sei denn durch Brute-Force-Cracking.

Lassen Sie uns die MD5-Verschlüsselung in Python implementieren:

url = "d3d3LmJhaWR1LmNvbQ=="
str_url = base64.b64decode(url).decode("utf-8")
print(str_url)

Ausgabe:

www.baidu.com

Wie 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())

4. Lassen Sie uns zunächst über die DES-Verschlüsselung sprechen. Der vollständige Name lautet Data Encryption Standard, d Das heißt, die im Verschlüsselungs- und Entschlüsselungsprozess verwendeten Schlüssel sind dieselben. Wenn Sie es also knacken möchten, können Sie die Brute-Force-Aufzählung verwenden, solange die Rechenleistung stark genug ist.

Der vollständige Name von AES ist Advanced Encryption Standard, der den DES-Algorithmus ersetzt und heute einer der beliebtesten symmetrischen Verschlüsselungsalgorithmen ist. Um den AES-Algorithmus zu verstehen, müssen Sie zunächst drei Grundkonzepte verstehen: Taste, Auffüllung und Modus.

Schlüssel

Wir haben schon oft über den Schlüssel gesprochen. Man kann ihn sich als einen Schlüssel vorstellen, der zum Ver- und Entriegeln verwendet werden kann. AES unterstützt drei Schlüssellängen: 128 Bit, 192 Bit und 256 Bit.

填充

而至于填充这一概念,AES的分组加密的特性我们需要了解,具体如下图所示:

Inventar gängiger Verschlüsselungsalgorithmen, die in 90 % der Python-Crawler verwendet werden

简单来说,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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen