色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

為什么要PKCS7填充?如何獲取真實字符串?

冬至配餃子 ? 來源:繆斯之子 ? 作者:肖新苗 ? 2022-08-23 11:04 ? 次閱讀

由來

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

目錄

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"'{b}'" == 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)
d2 =
assert d1 == d2, 'decrypto error'


def main():
call_en()
call_de()


if __name__ == '__main__':
main()




審核編輯:劉清

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

    關注

    1

    文章

    579

    瀏覽量

    20536
  • 加密解密算法

    關注

    0

    文章

    7

    瀏覽量

    1616
收藏 人收藏

    評論

    相關推薦

    base64字符串轉換為二進制文件

    一些編程知識。以下是將Base64字符串轉換為二進制文件的一般步驟,以及一個簡單的Python示例代碼。 步驟: 獲取Base64字符串 :首先,你需要有一個Base64編碼的字符串
    的頭像 發表于 11-10 10:55 ?1216次閱讀

    MATLAB(5)--字符串處理

    。 建立多行字符串,形成字符串矩陣,因為是矩陣,要求各行字符相等,也就是列數相同,當各行字符
    發表于 09-06 10:22

    labview字符串數組轉化為數值數組

    在LabVIEW中,將字符串數組轉換為數值數組是一項常見的任務,尤其是在處理數據采集、信號處理或用戶輸入時。 1. 理解LabVIEW的數據類型 在開始之前,了解LabVIEW中的數據類型是非
    的頭像 發表于 09-04 17:47 ?2419次閱讀

    labview字符串如何轉換為16進制字符串

    在LabVIEW中,將字符串轉換為16進制字符串是一個常見的需求,尤其是在處理數據通信和硬件接口時。LabVIEW提供了多種方法來實現這一轉換,包括使用內置函數、編寫VI(Virtual
    的頭像 發表于 09-04 15:54 ?2576次閱讀

    labview中如何實現字符串換行

    1. 字符串換行的基本概念 在LabVIEW中,字符串換行通常指的是在字符串中插入換行符,使得字符串在顯示或輸出時能夠自動換行。這在創建用戶界面或處理文本數據時非常有用。 2.
    的頭像 發表于 09-04 15:47 ?1772次閱讀

    labview中如何實現字符串選擇輸出

    在LabVIEW中實現字符串選擇輸出是一項常見的任務,它涉及到字符串處理、條件判斷和用戶界面設計等多個方面。由于LabVIEW是一種圖形化編程語言,其編程方式與傳統的文本編程語言有所不同,因此實現
    的頭像 發表于 09-04 15:44 ?962次閱讀

    labview中常用的字符串函數有哪些?

    在LabVIEW中,常用的字符串函數廣泛覆蓋了對字符串的各種操作,包括但不限于格式化、搜索、替換、連接、計算長度等。以下是一些常用的字符串函數及其簡要說明: 字符串長度(String
    的頭像 發表于 09-04 15:43 ?780次閱讀

    labview字符串的四種表示各有什么特點

    。在LabVIEW中,字符串是一種基本的數據類型,用于表示文本信息。字符串在LabVIEW中有多種表示方式,每種方式都有其特定的應用場景和特點。以下是對LabVIEW中四種字符串表示方式的分析: 1.
    的頭像 發表于 09-04 15:40 ?599次閱讀

    銳評Ruby 3.4.0 默認啟用字符串字面量凍結功能

    據悉,Ruby自2.3版起引入了“凍結”機制,通過使用frozen_string_literal: true魔法注釋,可令文件內所有字符串字面量默認為凍結狀態,防止開發過程中無意修改字符串,提高代碼穩定性與性能,降低內存占用。
    的頭像 發表于 05-17 15:44 ?394次閱讀

    STM32 USB的字符串描述符不能顯示是哪里的問題?

    最近用STM32做了一個USB 的HID類設備,設備描述符中有指定廠商字符串索引、產品字符串索引、序列號索引。在獲取字符串的代碼部分也發現確實執行了,但是插上電腦后卻沒有我想要的字符串
    發表于 04-30 08:13

    鴻蒙TypeScript學習第10天:【String(字符串)】

    String 對象用于處理文本(字符串)。
    的頭像 發表于 04-08 14:32 ?832次閱讀
    鴻蒙TypeScript學習第10天:【String(<b class='flag-5'>字符串</b>)】

    C語言字符串編譯函數介紹

    在C語言中,字符串實際上是使用null字符O'終止的一維字符數組。因此,一個以null結尾的字符串,包含了組成字符串
    的頭像 發表于 03-07 16:18 ?519次閱讀
    C語言<b class='flag-5'>字符串</b>編譯函數介紹

    USB字符串描述符里面的序列號字符串到底是什么東西?

    在設備描述符里面,有一個表示序列號字符串描述符的編號,請問這個序列號字符串的描述符是什么東西呢? 廠商字符串和設備字符串都能理解,而且在電腦的“設備與打印機”里面都找到了。但請問這個
    發表于 01-24 08:06

    labview二進制字符串轉數值

    字符串是一種常見的數據類型,它表示了以二進制形式存儲的數據。當我們需要將這些二進制字符串轉換為數值時,LabVIEW提供了一些常用的函數和方法,可以幫助我們完成這個任務。 首先,我們需要明確二進制字符串的格式。在LabVIEW中
    的頭像 發表于 01-05 16:20 ?2754次閱讀

    labview波形信號怎么轉成字符串

    LabVIEW是一款強大的系統設計平臺,可以用于各種應用,包括信號處理和數據采集。在LabVIEW中,將波形信號轉換為字符串需要幾個步驟。本文將詳細介紹這些步驟,并提供實用的示例代碼。 步驟1:獲取
    的頭像 發表于 01-04 09:46 ?1629次閱讀
    主站蜘蛛池模板: 黃色带三级a级| YELLOW免费观看2019| 亚洲影院在线播放| 第四色男人天堂| 免费在线观看的毛片| 中文字幕成人| 久久er99热精品一区二区| 小柔的性放荡羞辱日记| 国产传媒18精品免费1区| 日韩1区1区产品乱码芒果榴莲| 在线 无码 中文 强 乱| 久久9精品区-无套内射无码| 无限好资源免费观看| 成人bt下载| 甜宠溺H宝贝嗯撞PLAY啊 | 涩涩涩涩爱网站| 超大号黑吊magnet| 日本高清免费在线| 国产 日韩 欧美 高清 亚洲 | 欧美18精品久久久无码午夜福利| 最新高清无码专区在线视频| 美女坐脸vk| yellow片在线观看免费观看动漫| 欧美成人免费观看久久| Y8848高清私人影院软件优势| 日本撒尿特写| 国产精品一久久香蕉国产线看| 亚洲AV怡红院AV男人的天堂| 精品国产人妻国语| 2023国产精品一卡2卡三卡4卡| 浪荡女天天不停挨CAO日常视| 99精品99| 思思久99久女女精品| 狠狠色狠狠色综合| 123超碰在线视频| 日韩视频中文在线一区| 国产亚洲精品看片在线观看| 在线免费观看国产| 肉动漫无修在线播放| 韩国污动漫无遮掩无删减电脑版| 中文在线观看|