常見加密方法解析 python加解密應用

2021-10-07 08:25:16 字數 4038 閱讀 8350

加密就是把明文通過處理變成密文

解密就是把密文解析成明文

加密的操作物件是 位元組碼,也就是bytes型別

所以對字串進行加密時,必須先將 str 轉換成 bytes 型別

轉換方法:

encode   //將 str 轉換成 bytes

decode //將 bytes 轉換成 str

計算機的儲存單位:

byte    //位元組    最基本的儲存單位

bit //最小的計算單位 (也就是一位) 代表計算機底層二進位制的 0

1運算關係

1byte = 8bit

1kb = 1024byte

1mb = 1024kb

1gb = 1024mb

1tb = 1024gb..

.

關於乙個漢字的位元組:

不同的編碼方式,位元組也不一樣

>>

>

print

("雄"

.encode(

'gbk'))

b'\xd0\xdb』 //gbk編碼方式,乙個漢字時兩個位元組

>>

>

print

("雄"

.encode(

'utf8'))

b'\xe9\x9b\x84』 //utf8(可變長編碼)的編碼方式, 乙個漢字是3個位元組

base64轉碼

base64編碼能夠 把資料長度變小,可逆推

>>

>

import base64

>>

>

>>

> a =

'zhangxiong123456'

>>

> a.encode(

)b'zhangxiong123456'

>>

>

>>

> a1 = base64.b64encode(a.encode())

//將位元組碼轉換成base64編碼格式

>>

> a1

b'emhhbmd4aw9uzzeymzq1ng==『 //尾部會用 = 補全(特徵)

>>

>

>>

> a2 = base64.b64decode(a1)

//將base64編碼還原

>>

> a2

b'zhangxiong123456'

1,單向加密 ( 雜湊 )

2,對稱加密( aes,des )

3,非對稱加密( rsa )

單向加密

單向加密 最常見的加密方式 就是md5( 資料摘要演算法 )

md5的特點:

1,定長輸出(32位,128bit);

2,不可逆;

3,加密內容細微改變,加密結果天差地別;

加密方法:

>>

>

import hashlib

>>

>

>>

> a = 'zhang』*

1000

//明文資料

>>

>

>>

> h = hashlib.md5(

)//建立乙個md5物件

>>

> h.update(a.encode())

>>

>

print

(h.hexdigest())

//列印加密結果

1770475a1e5f70dd0e0e30d940dfe1da

//加密後的密文資料

對稱加密

1,加密方法是完全公開的,加密 和 解密 完全依賴金鑰;

2,金鑰長度越長,加解密耗時越長, 也相對更安全;

3,aes相比較des,加密演算法更加複雜;

des    支援的金鑰長度56

;aes 支援的金鑰長度128

,256

,512

;

des加密方法:

( 入口引數有3個 :key( 金鑰8個位元組 ), data( 要執行的資料 ) ,mode( 要執行的操作 ))
匯入des

from cryptodome.cipher import des

#金鑰key = b』abcdefgh'

#要加密的資料

text = 『1234567811223344』 //判斷是8位元組的倍數

#宣告des物件

des = des.new(key, des.mode_ecb)

#加密a = des.encrypt(text.encode())

//加密操作只能執行位元組碼資料

#解密b = des.decrypt(a)

aes加密方法:

1,分段加密

2,多乙個引數 vi ( 偏移量 )

匯入aes

from cryptodome.cipher import aes

from cryptodome import random

#要加密的資料

text = 『zhangxiong』

#金鑰key = b'abcdefghabcdefgh』 //

128——16

256——32

512——64

#生成iv (分段加密時的偏移量)

iv = random.new(

).read(aes,block_size)

#宣告aes物件

aes = aes.new(key, aes.mode_cfb, iv)

#加密encrypt_text= aes.encrypt(text.encode())

//獲得加密後的資料

#使用上面同乙個vi 和 key 再次生成乙個aes物件

decrypt_aes = aes.new(key, aes.mode_cfb, iv)

//因為再次呼叫aes,會再次執行生成aes物件,因為vi時乙個隨機值,第二次呼叫時的aes物件會跟加密時使用的aes物件不一樣,就無法完成解密,因此只能使用同乙個vi 和 key 重新生成一次aes物件,這樣就確保了 加密 和 解密 的aes物件一致;

#解密decrypt_aes.decrypt(encrypt_text)

**

****

****

****

****

****

****

****

****

****

****

****

****

****

****

****

****

以上加密後的資料展示

b』p}\x08\xae\x182&\x80』

可以使用binascii轉換

from binascii import b2a_hex

b2a_hex(

)//使用此方法

結果: b』e7c6c53222396ff'

****

****

****

****

****

****

****

****

****

****

****

****

****

****

****

****

**

ios常見加密解密方法

在其他平台中經常會計算md5值,在ios平台中也提供了該方法,首先需要匯入標頭檔案 cpp view plain copy import 方法cc md5可以獲取md5的16個字元的陣列,再通過 02x的形式輸出即可獲取32位md5值。cpp view plain copy implementati...

常見的加密解密方法

加密 資料加密,預設加密物件是位元組 bytes str 字串 decode encode 自帶的庫 binasict 二進位制十六進製制 儲存單位 byte 位元組8位 1byte bit kb 1k 1024byte mb 1024kb gbtb 對稱加密 des aes 非對稱加密 rsa 單...

常見加密方式及Python實現

行者ai 由於計算機軟體的非法複製,通訊的洩密 資料安全受到威脅,所以加密在開發過程中是經常使用到的技術,在一些重要場景中都有所應用,如 登入 支付 oauth等,場景不同需要搭配不一樣的簽名加密演算法來達到業務目標。加密演算法分雜湊演算法 對稱加密 非對稱加密。1 雜湊演算法 經常需要驗證訊息的完...