現如今,各行各業都會用到各種各樣的算法,包括我們在使用Python的時候,也會使用到各種各樣的算法,比如,我們會使用到各種的加密算法,那么,到底什么才是加密算法呢?下面就給大家詳細解答下。
序言
下面小編就和大家一起來盤點下數據收集環節中這一些熱門的密碼算法,這些有什么特點、數據加密的形式有哪些方面這些,了解了這一些以后其實對于我們反向破譯這一些數據加密的主要參數可以起到很多的協助!
相信大家數據收集的過程中,會遇到許多數據加密的主要參數,比如說好像"token"、"sign"這些,下面小編就和大家一起來盤點下數據收集環節中這一些熱門的密碼算法,這些有什么特點、數據加密的形式有哪些方面這些,了解了這一些以后其實對于我們反向破譯這一些數據加密的主要參數可以起到很多的協助!
1.基礎常識
首先我們需要明白的是,什么是加密和解密?顧名思義
加密(Encryption):將明文數據變換為密文的過程
解密(Decryption):加密的逆過程,即由密文恢復出原明文的過程。
加密和解密算法的操作通常都是在一組密鑰的控制下進行的,分別成為是加密密鑰(Encryption Key)和解密密鑰(Decryption Key),
如下圖所示:
而加密算法當中又分為是對稱加密和非對稱加密以及散列算法,其中
對稱加密:即加密與解密時使用的是相同的密鑰,例如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的分組加密的特性我們需要了解,具體如下圖所示:
簡單來說,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')
綜上所述,這篇內容就給大家介紹到這里了,希望可以給大家帶來幫助。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/128437.html
摘要:時間永遠都過得那么快,一晃從年注冊,到現在已經過去了年那些被我藏在收藏夾吃灰的文章,已經太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設置私密了,不收拾不好看呀。 ...
摘要:常見狀態碼號碼含義表示服務器成功接收部分請求,要求客戶端繼續提交其余請求才能完成整個處理過程表示服務器成功接收請求并已完成整個處理過程。 創建時間:2021-11-24作者:在下小黃一、小試牛刀:1.1 怎樣扒網頁呢?其實就是根據URL來獲取它的網頁信息,雖然我們在瀏覽器中看到的是一幅幅優美的畫面,但是其實是由...
摘要:所以只要得到登錄后的并必要時進行更新,服務器就會認定其為登錄狀態。看看人家知乎,加密到連名字都沒有了,還混淆,如何下手綜上,適用于沒有加密的登錄或者加密算法比較簡單并且不常更新的網站。遇上無解的加密算法要么手操拷貝,要么請大佬出場。 某些網站,登錄和沒登錄,用戶的權限是不一樣的,帳號登錄之后才能獲取更多的信息。更有甚者一上來就是登錄界面,不登錄就不給你進去(如p站)。爬取目標不用登錄固...
摘要:方法不僅適用于百度云,別的一些比較難以模擬登陸的網站都可以按照這種方式分析。本文要求讀者具有模擬登陸主要是抓包和閱讀代碼和密碼學的基本知識。和模擬登陸微博的分析流程一樣,我們首先要做的是以正常人的流程完整的登錄一遍百度網盤。 這是第二篇從簡書搬運過來的文章(大家別誤會,是我原創的)。因為前一篇文章,我看反響還挺好的,所以把這篇也搬運過來了,其實目的還是為宣傳自己的分布式微博爬蟲(該項目...
摘要:作用標準模式與兼容模式各有什么區別聲明位于位于文檔中的第一行,處于標簽之前。又稱內核及以上版本,等內核及以上。存儲大小數據大小不能超過。可以防止惡意刷票論壇灌水有效防止對某一個特定注冊用戶用特定程序暴力方式進行不斷的登陸嘗試。 HTMLDoctype作用?標準模式與兼容模式各有什么區別?(1)、聲明位于位于HT...
閱讀 917·2023-01-14 11:38
閱讀 888·2023-01-14 11:04
閱讀 747·2023-01-14 10:48
閱讀 2025·2023-01-14 10:34
閱讀 954·2023-01-14 10:24
閱讀 829·2023-01-14 10:18
閱讀 504·2023-01-14 10:09
閱讀 581·2023-01-14 10:02