現(xiàn)如今,各行各業(yè)都會(huì)用到各種各樣的算法,包括我們在使用Python的時(shí)候,也會(huì)使用到各種各樣的算法,比如,我們會(huì)使用到各種的加密算法,那么,到底什么才是加密算法呢?下面就給大家詳細(xì)解答下。
序言
下面小編就和大家一起來盤點(diǎn)下數(shù)據(jù)收集環(huán)節(jié)中這一些熱門的密碼算法,這些有什么特點(diǎn)、數(shù)據(jù)加密的形式有哪些方面這些,了解了這一些以后其實(shí)對于我們反向破譯這一些數(shù)據(jù)加密的主要參數(shù)可以起到很多的協(xié)助!
相信大家數(shù)據(jù)收集的過程中,會(huì)遇到許多數(shù)據(jù)加密的主要參數(shù),比如說好像"token"、"sign"這些,下面小編就和大家一起來盤點(diǎn)下數(shù)據(jù)收集環(huán)節(jié)中這一些熱門的密碼算法,這些有什么特點(diǎn)、數(shù)據(jù)加密的形式有哪些方面這些,了解了這一些以后其實(shí)對于我們反向破譯這一些數(shù)據(jù)加密的主要參數(shù)可以起到很多的協(xié)助!
1.基礎(chǔ)常識
首先我們需要明白的是,什么是加密和解密?顧名思義
加密(Encryption):將明文數(shù)據(jù)變換為密文的過程
解密(Decryption):加密的逆過程,即由密文恢復(fù)出原明文的過程。
加密和解密算法的操作通常都是在一組密鑰的控制下進(jìn)行的,分別成為是加密密鑰(Encryption Key)和解密密鑰(Decryption Key),
如下圖所示:
而加密算法當(dāng)中又分為是對稱加密和非對稱加密以及散列算法,其中
對稱加密:即加密與解密時(shí)使用的是相同的密鑰,例如RC4、AES、DES等加密算法
非對稱加密:即加密與解密時(shí)使用不相同的密鑰,例如RSA加密算法等
散列算法:又稱為是哈希函數(shù)。對不同長度的輸入消息產(chǎn)生固定的輸出,該輸出值就是散列值
2.Base64偽加密
Base64嚴(yán)格意義上來說不算做事加密的算法,只是一種編碼的方式,它是一種用64個(gè)字符,分別是A-Z、a-z、0-9、+、/這64個(gè)字符,實(shí)現(xiàn)對數(shù)據(jù)的編碼,可用于在HTTP環(huán)境下傳遞較長的標(biāo)識信息。采用Base64編碼具有不可讀性,需要解碼后才能閱讀。我們使用Python來對任意網(wǎng)址進(jìn)行Base64的編碼操作,代碼如下:
import base64 #想將字符串轉(zhuǎn)編碼成base64,要先將字符串轉(zhuǎn)換成二進(jìn)制數(shù)據(jù) url="www.baidu.com" bytes_url=url.encode("utf-8") str_url=base64.b64encode(bytes_url)#被編碼的參數(shù)必須是二進(jìn)制數(shù)據(jù) print(str_url)
輸出:
b'd3d3LmJhaWR1LmNvbQ=='
那么同樣地,我們也可以對其進(jìn)行解碼的操作,代碼如下:
url="d3d3LmJhaWR1LmNvbQ==" str_url=base64.b64decode(url).decode("utf-8") print(str_url)
輸出:
www.baidu.com
3.MD5加密
MD5是一種被廣泛使用的線性散列算法,且加密之后產(chǎn)生的是一個(gè)固定長度(32位或者是16位)的數(shù)據(jù),由字母和數(shù)字組成,大小寫統(tǒng)一。其最后加密生成的數(shù)據(jù)是不可逆的,也就是說不能夠輕易地通過加密后的數(shù)據(jù)還原到原始的字符串,除非是通過暴力破解的方式。
我們在Python當(dāng)中來實(shí)現(xiàn)一下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加密可以通過暴力破解的方式來降低其安全性,因此在實(shí)操過程當(dāng)中,我們會(huì)添加鹽值(Salt)或者是雙重MD5加密等方式來增加其可靠性,代碼如下:
#post傳入的參數(shù) 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,即數(shù)據(jù)加密標(biāo)準(zhǔn),在對稱性加密當(dāng)中比較常見的一種,也就是加密和解密過程當(dāng)中使用的密鑰是相同的,因此想要破解的話,通過暴力枚舉的方式,只要計(jì)算的能力足夠強(qiáng)還是可以被破解的。
AES的全稱是Advanced Encryption Standard,是DES算法的替代者,也是當(dāng)今最流行的對稱加密算法之一。想要弄清楚AES算法,首先就得弄明白三個(gè)基本的概念:密鑰、填充和模式。
密鑰
密鑰我們之前已經(jīng)說了很多了,大家可以將其想象成是一把鑰匙,既可以用其來進(jìn)行上鎖,可以用其來進(jìn)行解鎖。AES支持三種長度的密鑰:128位、192位以及256位。
填充
而至于填充這一概念,AES的分組加密的特性我們需要了解,具體如下圖所示:
簡單來說,AES算法在對明文加密的時(shí)候,并不是把整個(gè)明文一股腦兒地加密成一整段密文,而是把明文拆分成一個(gè)個(gè)獨(dú)立的明文塊,每一個(gè)明文塊的長度為128比特。
這些明文塊經(jīng)過AES加密器的復(fù)雜處理之后,生成一個(gè)個(gè)獨(dú)立的密文塊,將這些密文塊拼接到一起就是最終的AES加密的結(jié)果了。
那么這里就有一個(gè)問題了,要是有一段明文的長度是196比特,如果按照每128比特一個(gè)明文塊來拆分的話,第二個(gè)明文塊只有64比特了,不足128比特該怎么辦呢?這個(gè)時(shí)候就輪到填充來發(fā)揮作用了,默認(rèn)的填充方式是PKCS5Padding以及ISO10126Padding。
不過在AES加密的時(shí)候使用了某一種填充方式,解密的時(shí)候也必須采用同樣的填充方式。
模式
AES的工作模式,體現(xiàn)在了把明文塊加密成密文塊的處理過程中,主要有五種不同的工作模式,分別是CBC、ECB、CTR、CFB以及OFB模式,同樣地,如果在AES加密過程當(dāng)中使用了某一種工作模式,解密的時(shí)候也必須采用同樣地工作模式。最后我們用Python來實(shí)現(xiàn)一下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')
綜上所述,這篇內(nèi)容就給大家介紹到這里了,希望可以給大家?guī)韼椭?/p>
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/128437.html
摘要:時(shí)間永遠(yuǎn)都過得那么快,一晃從年注冊,到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
摘要:常見狀態(tài)碼號碼含義表示服務(wù)器成功接收部分請求,要求客戶端繼續(xù)提交其余請求才能完成整個(gè)處理過程表示服務(wù)器成功接收請求并已完成整個(gè)處理過程。 創(chuàng)建時(shí)間:2021-11-24作者:在下小黃一、小試牛刀:1.1 怎樣扒網(wǎng)頁呢?其實(shí)就是根據(jù)URL來獲取它的網(wǎng)頁信息,雖然我們在瀏覽器中看到的是一幅幅優(yōu)美的畫面,但是其實(shí)是由...
摘要:所以只要得到登錄后的并必要時(shí)進(jìn)行更新,服務(wù)器就會(huì)認(rèn)定其為登錄狀態(tài)。看看人家知乎,加密到連名字都沒有了,還混淆,如何下手綜上,適用于沒有加密的登錄或者加密算法比較簡單并且不常更新的網(wǎng)站。遇上無解的加密算法要么手操拷貝,要么請大佬出場。 某些網(wǎng)站,登錄和沒登錄,用戶的權(quán)限是不一樣的,帳號登錄之后才能獲取更多的信息。更有甚者一上來就是登錄界面,不登錄就不給你進(jìn)去(如p站)。爬取目標(biāo)不用登錄固...
摘要:方法不僅適用于百度云,別的一些比較難以模擬登陸的網(wǎng)站都可以按照這種方式分析。本文要求讀者具有模擬登陸主要是抓包和閱讀代碼和密碼學(xué)的基本知識。和模擬登陸微博的分析流程一樣,我們首先要做的是以正常人的流程完整的登錄一遍百度網(wǎng)盤。 這是第二篇從簡書搬運(yùn)過來的文章(大家別誤會(huì),是我原創(chuàng)的)。因?yàn)榍耙黄恼拢铱捶错戇€挺好的,所以把這篇也搬運(yùn)過來了,其實(shí)目的還是為宣傳自己的分布式微博爬蟲(該項(xiàng)目...
摘要:作用標(biāo)準(zhǔn)模式與兼容模式各有什么區(qū)別聲明位于位于文檔中的第一行,處于標(biāo)簽之前。又稱內(nèi)核及以上版本,等內(nèi)核及以上。存儲(chǔ)大小數(shù)據(jù)大小不能超過。可以防止惡意刷票論壇灌水有效防止對某一個(gè)特定注冊用戶用特定程序暴力方式進(jìn)行不斷的登陸嘗試。 HTMLDoctype作用?標(biāo)準(zhǔn)模式與兼容模式各有什么區(qū)別?(1)、聲明位于位于HT...
閱讀 926·2023-01-14 11:38
閱讀 899·2023-01-14 11:04
閱讀 758·2023-01-14 10:48
閱讀 2063·2023-01-14 10:34
閱讀 965·2023-01-14 10:24
閱讀 844·2023-01-14 10:18
閱讀 512·2023-01-14 10:09
閱讀 590·2023-01-14 10:02