日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

隨著網(wǎng)絡(luò)上爬蟲的橫行和猖獗,各大網(wǎng)站為了最大限度地限制自家數(shù)據(jù)被采集,紛紛加入了各種反爬手段,比如:

  • 生成瀏覽器UA指紋識別;
  • 用各種驗證方式(短信、滑塊、點選漢字、點擊)進行識別;
  • ……

這一類的反爬手段都是一層防御,類似于城堡的城門一樣,只要突破這道防線,就可以為所欲為了。

除此之外,還有一些網(wǎng)站,會進行二層防御,對數(shù)據(jù)加入各種限制措施,比如混淆、加密等。這就像我們進了城門之后,要是想進某某內(nèi)城,還得經(jīng)過門口的官兵對腰牌和核驗。

比如某電商網(wǎng)站就在數(shù)據(jù)中使用了AES加密,其返回的數(shù)據(jù)如下圖所示:

使用Python對數(shù)據(jù)進行AES加密和解密

 

經(jīng)過解密之后,我們可以得到真正的數(shù)據(jù)為,如下圖所示:

使用Python對數(shù)據(jù)進行AES加密和解密

 

這就是利用Python進行AES解密實現(xiàn)的,下面,我們來介紹一下在Python中對數(shù)據(jù)進行AES加密和AES解密。

一、AES算法簡介

以下內(nèi)容來自于網(wǎng)絡(luò),大家隨便看看,如果想詳細了解,可以找專門的資料進行學(xué)習:

AES全稱為高級加密標準,是Advanced Encryption Standard的首字母簡寫。

AES加密標準又稱為高級加密標準Rijndael加密法,是美國國家標準技術(shù)研究所NIST旨在取代DES的21世紀的加密標準。AES的基本要求是,采用對稱分組密碼體制,密鑰長度可以為128、192或256位,分組長度128位,算法應(yīng)易在各種硬件和軟件上實現(xiàn)。1998年NIST開始AES第一輪分析、測試和征集,共產(chǎn)生了15個候選算法。 [1]1999年3月完成了第二輪AES2的分析、測試。2000年10月2日美國政府正式宣布選中比利時密碼學(xué)家Joan Daemen和Vincent Rijmen提出的一種密碼算法Rijndael作為AES的加密算法。AES加密數(shù)據(jù)塊和密鑰長度可以是128b、192b、256b中的任意一個。AES加密有很多輪的重復(fù)和變換。大致步驟如下:①密鑰擴展(Key Expansion);②初始輪(InitialRound);③重復(fù)輪(Rounds),每一重復(fù)輪又包括字節(jié)間減法運算(SubBytes)、行移位(ShiftRows)、列混合(MixColurmns)、輪密鑰加法運算(AddRoundKey)等操作;①最終輪(Final Round),最終輪沒有列混合操作(MixColumns)。

二、AES加密

在這里,我們選用AES加密算法中的CBC模式來進行演示。

在上面我們提過,AES加密算法的CBC模式采用密鑰和偏移量的方式對數(shù)據(jù)進行加密,所以我們首先定義幾個公共的參數(shù),包括原始數(shù)據(jù)、密鑰、偏移量和AES的CBC模式,代碼如下所示:

a = '''{'name':'州的先生','url':'zmister.com','desc':'編程應(yīng)用實戰(zhàn)'}''' # 原始數(shù)據(jù)
k = 'zmistercomzmiste'.encode('utf-8') # 密鑰
iv = b'1234567890asdfgh' # 偏移量
mode = AES.MODE_CBC # 模式

在這里,我們設(shè)置的密鑰長度為16位字符串,也就是128位字節(jié),在AES加密算法中,密鑰的長度必須為16位字符串(128字節(jié))、34位字符串(192字節(jié))、32位字符串(256字節(jié))。

接著,我們創(chuàng)建一個函數(shù),用來對原始的數(shù)據(jù)進行加密:

# 加密數(shù)據(jù)
def cryp_str(value):
 value = value.encode('utf-8') # 對數(shù)據(jù)進行utf-8編碼
 cryptor = AES.new(k, mode, iv) # 創(chuàng)建一個新的AES實例
 length = 16
 count = len(value)
 # 如果數(shù)據(jù)長度小于密鑰長度
 if count < length:
 add = (length - count)
 #  backspace
 text = value + ('' * add).encode('utf-8')
 elif count > length:
 add = (length - (count % length))
 text = value + ('' * add).encode('utf-8')
 ciphertext = cryptor.encrypt(text) # 加密字符串
 print("原始加密數(shù)據(jù):",ciphertext)
 ciphertext_hex = b2a_hex(ciphertext) # 字符串轉(zhuǎn)十六進制數(shù)據(jù)
 print("十六進制加密:",ciphertext_hex)
 ciphertext_hex_de = ciphertext_hex.decode()
 print("十六進制加密字符串:",ciphertext_hex_de)
 return ciphertext_hex_de

我們將原始數(shù)據(jù)傳入其中運行,可以得到加密后的數(shù)據(jù),如下圖所示:

使用Python對數(shù)據(jù)進行AES加密和解密

 

在完成使用Python對數(shù)據(jù)進行AES加密之后,我們繼續(xù)使用Python對AES加密的數(shù)據(jù)進行解密。

三、AES解密

相較于AES加密,AES解密要簡單得多。我們首先實例化一個AES類,然后將加密的十六進制數(shù)據(jù)轉(zhuǎn)換為字符串形式,接著調(diào)用AES實例的decrypt()方法對數(shù)據(jù)進行解密即可,最后再對解密的數(shù)據(jù)進行解碼,就可以得到原始的數(shù)據(jù),其代碼如下所示:

# 解密數(shù)據(jù)
def decry_str(value):
 cryptor = AES.new(k, mode, iv) # 創(chuàng)建一個AES實例
 value_hex = a2b_hex(value) # 將十六進制數(shù)據(jù)轉(zhuǎn)換為字符串
 plain_text = cryptor.decrypt(value_hex) # 對字符串進行解密
 print("解密數(shù)據(jù):",plain_text)
 print('解碼解密數(shù)據(jù):',bytes.decode(plain_text).rstrip(''))
 return bytes.decode(plain_text).rstrip('')

我們將之前AES加密的數(shù)據(jù)作為參數(shù)傳入其中并運行,最后得到解密后的原始數(shù)據(jù),如下圖所示:

使用Python對數(shù)據(jù)進行AES加密和解密

 

這樣,我們就完成了使用Python對數(shù)據(jù)進行AES加密和解密。

四、最后

在實際的網(wǎng)站中,可能數(shù)據(jù)不僅僅是通過一種加密手段進行的加密,更多的加密數(shù)據(jù)會使用多種加密手段進行混淆加密。面對這種情況,一定要先摸透數(shù)據(jù)的加密過程,不能盲目嘗試。

文章出處:州的先生博客

原文地址:https://zmister.com/archives/1100.html

分享到:
標簽:加密 Python AES
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定