搜尋
首頁後端開發Python教學盤點 90% Python 爬蟲類中常見的加密演算法

盤點 90% Python 爬蟲類中常見的加密演算法

Apr 13, 2023 am 10:52 AM
python爬蟲加密演算法

盤點 90% Python 爬蟲類中常見的加密演算法

相信大家在資料抓取的時候,會碰到很多加密的參數,例如像是"token"、"sign"等等,今天小編就帶著大家來盤點一下資料抓取過程中這些主流的加密演算法,它們有什麼特徵、加密的方式有哪些等等,知道了這些之後對於我們逆向破解這些加密的參數會起到不少的幫助!

1. 基礎常識

首先我們要明白的是,什麼是加密和解密?顧名思義

  • 加密(Encryption): 將明文資料轉換為密文的過程
  • 解密(Decryption): 加密的逆過程,即由密文恢復原明文的過程。

加密和解密演算法的操作通常都是在一組金鑰的控制下進行的,分別成為是加密金鑰(Encryption Key)和解密金鑰(Decryption Key),如下圖所示:

盤點 90% Python 爬蟲類中常見的加密演算法

而加密演算法當中又分為是對稱加密和非對稱加密以及雜湊演算法,其中

  • 對稱加密:即加密與解密時使用的是相同的金鑰,例如RC4、AES、DES等加密演算法
  • 非對稱加密:即加密與解密時使用不相同的金鑰,例如RSA加密演算法等
  • 雜湊演算法:又稱為是雜湊函數。對不同長度的輸入訊息產生固定的輸出,此輸出值就是雜湊值

2. Base64偽加密

Base64嚴格意義上來說不算是做事加密的演算法,只是一種編碼的方式,它是一種用64個字符,分別是A-Z、a-z、0-9、 、/這64個字符,實現對數據的編碼,可用於在HTTP環境下傳遞較長的標識資訊.採用Base64編碼具有不可讀性,需要解碼後才能閱讀。我們使用Python來對任意網址進行Base64的編碼操作,程式碼如下:

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

3. MD5加密

MD5是一種被廣泛使用的線性雜湊演算法,且加密之後產生的是固定長度(32位或是16位)的數據,由字母和數字組成,大小寫統一。其最後加密產生的資料是不可逆的,也就是說不能夠輕易地透過加密後的資料還原到原始的字串,除非是透過暴力破解的方式。

我們在Python當中來實作一下MD5加密:

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

就像上文提到的,針對MD5加密可以透過暴力破解的方式來降低其安全性,因此在實操過程當中,我們會添加鹽值(Salt)或雙重MD5加密等方式來增加其可靠性,代碼如下:

# 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

4. AES/DES對稱加密

首先我們來講DES加密,全名為Data Encryption Standard,也就是資料加密標準,在對稱性加密當中比較常見的一種,也就是加密和解密過程當中使用的金鑰是相同的,因此想要破解的話,透過暴力枚舉的方式,只要計算的能力夠強還是可以被破解的。

AES的全名是Advanced Encryption Standard,是DES演算法的替代者,也是當今最受歡迎的對稱加密演算法之一。想要弄清楚AES演算法,首先就得弄清楚三個基本的概念:金鑰、填充和模式。

密鑰

密鑰我們之前已經說了很多了,大家可以將其想像成是一把鑰匙,既可以用其來進行上鎖,可以用其來進行解鎖。 AES支援三種長度的密鑰:128位元、192位元以及256位元。

填充

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

盤點 90% Python 爬蟲類中常見的加密演算法

简单来说,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加密算法的实现过程,基本上也都是大同小异的,由于篇幅有限,今天暂时就先介绍到这里,后面要是大家感兴趣的话,会去分享一下其他加密算法的实现原理与特征。

以上是盤點 90% Python 爬蟲類中常見的加密演算法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:51CTO.COM。如有侵權,請聯絡admin@php.cn刪除
您如何切成python陣列?您如何切成python陣列?May 01, 2025 am 12:18 AM

Python列表切片的基本語法是list[start:stop:step]。 1.start是包含的第一個元素索引,2.stop是排除的第一個元素索引,3.step決定元素之間的步長。切片不僅用於提取數據,還可以修改和反轉列表。

在什麼情況下,列表的表現比數組表現更好?在什麼情況下,列表的表現比數組表現更好?May 01, 2025 am 12:06 AM

ListSoutPerformarRaysin:1)DynamicsizicsizingandFrequentInsertions/刪除,2)儲存的二聚體和3)MemoryFeliceFiceForceforseforsparsedata,butmayhaveslightperformancecostsinclentoperations。

如何將Python數組轉換為Python列表?如何將Python數組轉換為Python列表?May 01, 2025 am 12:05 AM

toConvertapythonarraytoalist,usEthelist()constructororageneratorexpression.1)intimpthearraymoduleandcreateanArray.2)USELIST(ARR)或[XFORXINARR] to ConconverTittoalist,請考慮performorefformanceandmemoryfformanceandmemoryfformienceforlargedAtasetset。

當Python中存在列表時,使用數組的目的是什麼?當Python中存在列表時,使用數組的目的是什麼?May 01, 2025 am 12:04 AM

choosearraysoverlistsinpythonforbetterperformanceandmemoryfliceSpecificScenarios.1)largenumericaldatasets:arraysreducememoryusage.2)績效 - 臨界雜貨:arraysoffersoffersOffersOffersOffersPoostSfoostSforsssfortasssfortaskslikeappensearch orearch.3)testessenforcety:arraysenforce:arraysenforc

說明如何通過列表和數組的元素迭代。說明如何通過列表和數組的元素迭代。May 01, 2025 am 12:01 AM

在Python中,可以使用for循環、enumerate和列表推導式遍歷列表;在Java中,可以使用傳統for循環和增強for循環遍歷數組。 1.Python列表遍歷方法包括:for循環、enumerate和列表推導式。 2.Java數組遍歷方法包括:傳統for循環和增強for循環。

什麼是Python Switch語句?什麼是Python Switch語句?Apr 30, 2025 pm 02:08 PM

本文討論了版本3.10中介紹的Python的新“匹配”語句,該語句與其他語言相同。它增強了代碼的可讀性,並為傳統的if-elif-el提供了性能優勢

Python中有什麼例外組?Python中有什麼例外組?Apr 30, 2025 pm 02:07 PM

Python 3.11中的異常組允許同時處理多個異常,從而改善了並發方案和復雜操作中的錯誤管理。

Python中的功能註釋是什麼?Python中的功能註釋是什麼?Apr 30, 2025 pm 02:06 PM

Python中的功能註釋將元數據添加到函數中,以進行類型檢查,文檔和IDE支持。它們增強了代碼的可讀性,維護,並且在API開發,數據科學和圖書館創建中至關重要。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境