在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

關于python Crypto的知識整理

冬至配餃子 ? 來源:繆斯之子 ? 作者:肖新苗 ? 2022-08-19 18:02 ? 次閱讀

由來

做爬蟲逆向的時候, 經常要用到加密解密

目錄

pkcs7填充: pad和unpad

crypto: 一個共同方法 + 一個例子

pkcs7填充:pad和unpad

1. 為什么要PKCS7填充?

因為PKCS7是當下各大加密算法都遵循的數據填充算法

2.基礎

1個字節有8位, 所以16個字節是128位, 比如: 一個字母A就是一個字節

16進制: 0-9, a,b,c,d,e,f, 其中a代表10,后面依次加1, 滿16進一,所以 15對應\x0f,16對應\x10

轉換:

int -> unicode: chr(1) 結果是 \x01

unicode -> int: ord('\x11')值為17

3. pkcs7補位規則

補位的個數: 不足16位字節的倍數,補足變成16位的倍數,如果剛好是16的倍數, 補16個字節

補位的值: 等于補位個數的unicode碼, 比如:content有7位,那么補充9個字節,每個字節的值都是\x09

4. 如何獲取真實字符串?

直接獲取字符串的最后一個字符,轉換為int即為補位的數, 然后,真實 = 原始字符串長度 - 補位的數


def pad(content: str, block_size: int = 16) -> str:
p_len = block_size - len(content) % block_size
p = p_len * chr(p_len)
return content + p


def unpad(content: str) -> str:
last_char = ord(content[-1])
# 獲取真實字符串,去掉最后補位的數據
return content[:-last_char]


def test_pad():
# 計算字符數
assert 3 == len('11中'), 'pad china error'
assert 4 == len('abcd'), 'pad china error'

p1 = pad('1')
assert '1\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f' == p1, 'pad 1 error'

b = r'1\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f'
assert f"''" == repr(p1), 'pad 1 1 error'

p2 = pad('11')
assert '11\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e' == p2, 'pad 2 error'

p15 = pad('111111111122222')
assert '111111111122222\x01' == p15, 'pad 15 error'

p16 = pad('1111111111222222')
assert '1111111111222222\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10' == p16, 'pad 16 error'


def test_unpad():
p1 = '1\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f'
assert '1' == unpad(p1)

p2 = '11\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e'
assert '11' == unpad(p2)

p15 = '111111111122222\x01'
assert '111111111122222' == unpad(p15)

p16 = '1111111111222222\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10'
assert '1111111111222222' == unpad(p16)

def pad(content: str, block_size: int = 16) -> str:    p_len = block_size - len(content) % block_size    p = p_len * chr(p_len)    return content + p

def unpad(content: str) -> str:    last_char = ord(content[-1])    # 獲取真實字符串,去掉最后補位的數據    return content[:-last_char]

def test_pad():    # 計算字符數    assert 3 == len('11中'), 'pad china error'    assert 4 == len('abcd'), 'pad china error'
    p1 = pad('1')    assert '1\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f' == p1, 'pad 1 error'
    b = r'1\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f'    assert f"''" == repr(p1), 'pad 1 1 error'
    p2 = pad('11')    assert '11\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e' == p2, 'pad 2 error'
    p15 = pad('111111111122222')    assert '111111111122222\x01' == p15, 'pad 15 error'
    p16 = pad('1111111111222222')    assert '1111111111222222\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10' == p16, 'pad 16 error'

def test_unpad():    p1 = '1\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f'    assert '1' == unpad(p1)
    p2 = '11\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e'    assert '11' == unpad(p2)
    p15 = '111111111122222\x01'    assert '111111111122222' == unpad(p15)
    p16 = '1111111111222222\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10'    assert '1111111111222222' == unpad(p16)

crypto: 一個共同方法 + 一個例子

代碼很簡單, 不需要過多的解釋

from base64 import b64decode, b64encode
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad


class CryptoR():

def __init__(self, key: str, iv: str):
self.aes = AES.new(key.encode('utf8'), AES.MODE_CBC, iv.encode('utf8'))

def encrypto(self, text: str) -> str:
p = pad(text.encode('utf8'), AES.block_size)
return b64encode(self.aes.encrypt(p)).decode('utf8')

def decrypto(self, text: str) -> str:
d = self.aes.decrypt(b64decode(text))
return unpad(d, AES.block_size).decode('utf8')

def call_en():
text = 'm3u8.okjx.cc|057f1eed099f2f7e'
key = 'dvyYRQlnPRCMdQSe'
iv = '057f1eed099f2f7e'
aes = CryptoR(key, iv)
e1 = aes.encrypto(text)
assert e1 == 'ncZvyrJ2IPdKSF2EmvfZAGVrtAj9D8eXnGpjPTV1QTM=', 'encrypto error'

def call_de():
text = 'HCizZLcgJfm1LvajcEBMHChheUySaJgXpuPL+L9BDW4jdd9ds5qCycVwN6SpotDujY/tok+sT2M//AeeKnDk6TrZ0gvFa1szUi8j3xg2TTZXZMW/52wuXhr1vnxrbrz4socZ2twSY1T63NiJx3XAcLe6RXfSmBxuPzstMQ0pDSSDNPT4H5hKYy1wo227zzcnxdAuwo1WTvcdaMIuXBS/9IkbqNFklzikvvdGjJjsVxRLwSd5T6v4I47CUAgVtncxpf3cKlM37lmEWpZwskJKG/IGkJRRy9K2a/tdIMWNu0JbsF0jlyMNT/kT2OS08jsRsGJPxOnpEiFIPgE6UPGUgq7+SaBHvFdSfusdqDTwBHuyXJTZBixolYEnggfr3UfWOtP1pvWR4R7bY2N7XJ7gEf6QMfjbu0YB1V4+2WX5ucy43954EniGFbUw2Zxi35y+OGgkpunPTzccVbGw871RjiU7iNVo+IXvQHgG+0FPjaWUezWYm4YAePohtxJYAqg+1XATcgFOKTUn21QQCDKAuQ=='
key = '0EAE7A71512EC09C'
iv = '675480787382e6f4'
aes = CryptoR(key, iv)
d1 = aes.decrypto(text)
vkey=5DD8A1F1C4657D16EE8F61CEA9D4FEDF5195B3F0404A4104E6877F4D61D6DF3F02B8EA021782BFF03319989D91AF586088584D8DB58C6908C6B83C02137CE54CB3F09873AC784EFB2D24A2A4D041757D7E753A5523BB08AC010E33F4DD1F8A16F8266900BA457AF5223DB94A6187A6280CEA7CCA4BF76EDC&QQ=335583&From=www.nxflv.com'
assert d1 == d2, 'decrypto error'


def main():
call_en()
call_de()


if __name__ == '__main__':
main()


審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 字符串
    +關注

    關注

    1

    文章

    589

    瀏覽量

    21072
  • 加密算法
    +關注

    關注

    0

    文章

    216

    瀏覽量

    25753
  • python
    +關注

    關注

    56

    文章

    4823

    瀏覽量

    86077
  • 加密解密
    +關注

    關注

    0

    文章

    9

    瀏覽量

    2718
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    電話配線架怎么整理好看

    要使電話配線架整理得既美觀又實用,可以遵循以下步驟和建議: 一、前期準備 了解配線架結構: 熟悉電話配線架的類型、結構和功能,確保整理過程中不會對設備造成損害。 斷開電源與通信: 在整理前,確保已
    的頭像 發表于 02-19 11:34 ?362次閱讀

    使用Python實現xgboost教程

    使用Python實現XGBoost模型通常涉及以下幾個步驟:數據準備、模型訓練、模型評估和模型預測。以下是一個詳細的教程,指導你如何在Python中使用XGBoost。 1. 安裝XGBoost
    的頭像 發表于 01-19 11:21 ?1073次閱讀

    儀器知識問答小課堂

    關于儀器設備實驗中的各種知識問題的問答
    的頭像 發表于 12-27 16:21 ?376次閱讀
    儀器<b class='flag-5'>知識</b>問答小課堂

    關于4G模組LuatOS開發:通用加解密函數(crypto)|全攻略

    本次我要說的攻略是關于4G模組LuatOS開發的通用加解密函數,我以我常用的Air780E模組為例子供大家參考。
    的頭像 發表于 11-30 09:52 ?746次閱讀
    <b class='flag-5'>關于</b>4G模組LuatOS開發:通用加解密函數(<b class='flag-5'>crypto</b>)|全攻略

    如何用python控制usb2any?

    我想用python控制usb2any,在網上搜索后得到的關于usb2any的資料很少,是否有官方的usb2any函數庫?
    發表于 11-08 14:36

    使用Python進行圖像處理

    下面是一個關于使用Python在幾行代碼中分析城市輪廓線的快速教程。
    的頭像 發表于 11-07 10:14 ?502次閱讀
    使用<b class='flag-5'>Python</b>進行圖像處理

    關于反應熱報告我們應該了解的知識

    。本文簡單梳理國內化工領域熱風險評估的演進歷程,以及對反應熱報告中的關鍵知識點進行了整理,以期為業內人士在開展 HAZOP (危險和可操作性分析)等工作時,能夠更準確地理解和應用反應熱分析報告,從而促進行業內的知識共享和
    的頭像 發表于 10-21 13:45 ?2756次閱讀
    <b class='flag-5'>關于</b>反應熱報告我們應該了解的<b class='flag-5'>知識</b>

    如何用python控制usb2any?

    我想用python控制usb2any,在網上搜索后得到的關于usb2any的資料很少,是否有官方的usb2any函數庫?
    發表于 09-27 06:44

    pytorch和python的關系是什么

    在當今的人工智能領域,Python已經成為了最受歡迎的編程語言之一。Python的易學易用、豐富的庫和框架以及強大的社區支持,使其成為了數據科學、機器學習和深度學習等領域的首選語言。而在深度學習領域
    的頭像 發表于 08-01 15:27 ?3038次閱讀

    Python建模算法與應用

    Python作為一種功能強大、免費、開源且面向對象的編程語言,在科學計算、數學建模、數據分析等領域展現出了卓越的性能。其簡潔的語法、對動態輸入的支持以及解釋性語言的本質,使得Python在多個平臺
    的頭像 發表于 07-24 10:41 ?1043次閱讀

    ubuntu下(python ver 2.7.6)運行python demo_server.py后無反應怎么解決?

    你好,以下是mesh demo中關于如何運行meshdemo的描述 Please follow below steps to run mesh_demo: 1. Set up mesh_demo
    發表于 07-22 08:20

    Python在AI中的應用實例

    Python在人工智能(AI)領域的應用極為廣泛且深入,從基礎的數據處理、模型訓練到高級的應用部署,Python都扮演著至關重要的角色。以下將詳細探討Python在AI中的幾個關鍵應用實例,包括機器學習、深度學習、自然語言處理、
    的頭像 發表于 07-19 17:16 ?2311次閱讀

    如何實現Python復制文件操作

    Python 中有許多“開蓋即食”的模塊(比如 os,subprocess 和 shutil)以支持文件 I/O 操作。在這篇文章中,你將會看到一些用 Python 實現文件復制的特殊方法。下面我們開始學習這九種不同的方法來實現 Pyt
    的頭像 發表于 07-18 14:53 ?673次閱讀

    opencv-python和opencv一樣嗎

    不一樣。OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺和機器學習軟件庫,它提供了大量的圖像和視頻處理功能。OpenCV-Python
    的頭像 發表于 07-16 10:38 ?1887次閱讀

    用pycharm進行python爬蟲的步驟

    以下是使用PyCharm進行Python爬蟲的步驟: 安裝PyCharm和Python 首先,您需要安裝PyCharm和Python。PyCharm是一個流行的Python集成開發環境
    的頭像 發表于 07-11 10:11 ?1289次閱讀
    主站蜘蛛池模板: tube69xxxxhd日本| 91午夜在线观看 | 奇米成人影视 | 天天干天天操天天玩 | 色综合久久丁香婷婷 | 亚洲黄网在线 | 女人张开腿男人桶 | 4tube高清性欧美 | 国产亚洲综合视频 | 伊人成年综合网 | 久久婷婷色 | 亚洲一区二区电影 | 中文字幕一区二区三区精彩视频 | a天堂在线观看 | 成人中文在线 | 成人午夜啪啪免费网站 | 日本资源在线 | 你懂的手机在线观看 | 在线视频播放大全 | 成人av在线电影 | va天堂| 永久黄网站色视频免费观看99 | 午夜视频一区 | 丁香网五月网 | 美女黄色毛片 | 四虎国产精品永久在线网址 | 国产精品久久久久久久免费 | 欧美色图日韩 | 老师在办公室被躁得舒服小说 | 婷婷激情五月 | 婷婷四房综合激情五月性色 | 男人j进入女人免费视频 | 黄色a网站 | 色爽爽爽爽爽爽爽爽 | 国产女主播精品大秀系列在线 | 欧美特黄三级在线观看 | 欧美久操| 女bbbbxxxx另类亚洲 | 亚洲天天做日日做天天看2018 | 久久好色 | 亚洲 欧美 91 |