python實現AES的加密解密

2021-09-20 06:51:52 字數 1585 閱讀 7568

了解aes

aes(advanced encryption standard)是一種對稱加密演算法,相較於des和3des演算法而言,aes演算法有著更高的速度和資源使用效率,安全級別也較之更高.

公式:c = e(k,p):明文p,金鑰k,aes加密函式組成e,密文c。

主要要了解以下幾點:

aes金鑰的長度使用的是128bite、192bite或256bite(位),即16byte、24byte或32byte(位元組),分別對應的加密輪數為10、12、14.長度越長,安全界別越高,效率低.

對要加密的資料分組時,每一組的分組長度理論上16、24或32(跟金鑰長度對應).

分組後的每組資料和金鑰進行位運算,得到謎文,每組謎文連線後的長度和明文是一致的.

分組密碼加密中的四種模式有ecb、cbc、cfb、ofb,使用加密模式不同,得到的謎文也不同.其中最常見的有ecb和cbc.

下面說說這兩種模式的特點:

在上面的加密過程中,當明文長度不是8位元組的整數倍的時候,需要對資料進行填充.這樣有乙個問題:

填充的值是什麼呢?

下面是一種思路:

python實現aes加密和解密

cbc模式的加密的實現**如下:

def cryptoen(string, key, iv):

""":param string: 原始資料

:param key: 金鑰

:param iv: 向量

:return:

"""print "原始data:", string

# 分組資料快大小

bs = aes.block_size

# 填充方案

pad = lambda s: s + (bs - len(s) % bs) * chr(bs - len(s) % bs)

# cbc模式

mode = aes.mode_cbc

cipher = aes.new(key,mode,iv)

encrypted = cipher.encrypt(pad(string)).encode('hex')

print "加密後的資料:" encrypted

cbc模式的解密**

def cryptode(destring, key, iv):

""":param string: 需要解密的資料

:param key: 金鑰

:param iv: 向量

:return:

"""print "需要解密的資料:", destring

# 分組資料快大小

bs = aes.block_size

# 解密時刪除填充的值

unpad = lambda s : s[0:-ord(s[-1])]

#cbc模式

mode = aes.mode_cbc

cipher = aes.new(key,mode,iv)

decrypted = unpad(cipher.decrypt(destring.decode('hex')))

print "解密後資料:", decrypted

Python 實現 AES 加密 解密

一 前言 金鑰 k 用來加密明文的密碼,在對稱加密演算法中,加密與解密的金鑰是相同的。金鑰為接收方與傳送方協商產生,但不可以直接在網路上傳輸,否則會導致金鑰洩漏,通常是通過非對稱加密演算法加密金鑰,然後再通過網路傳輸給對方,或者直接面對面商量金鑰。金鑰是絕對不可以洩漏的,否則會被攻擊者還原密文,竊取...

Python實現AES加密解密

報錯 typeerror decrypt cannot be called after encrypt 原因 cryptor不能寫在主函式中同時給加密函式與解密函式使用,儘管加密解密都是用 cryptor aes.new key,mode,iv 但若將其定義在main並分別傳給加密解密同時使用時,會...

python 乍見(實現AES 加密解密)

coding utf8 import sysfrom crypto.cipher import aesfrom binascii import b2a hex,a2b hex class prpcrypt def init self,key self.key key self.mode aes.mo...