python實現的AES雙向對稱加密解密與用法分析

2022-10-04 21:12:26 字數 2373 閱讀 2239

高階加密標準(advanced encryption standard,aes),在密碼學中又稱rijndael加密法,是美國聯邦**採用的一種區塊加密標準。這個標準用來替代原先的des,已經被多方分析且廣為全世界所使用。經過五程式設計客棧年的甄選流程,高階加密標準由美國國家標準與技術研究院(nist)於2023年11月26日發布於fips pub 197,並在2023年5月26日成為有效的標準。2023年,高階加密標準已然成為對稱金鑰加密中最流行的演算法之一。

aes只是個基本演算法,實現aes有若干模式。其中的cbc模式因為其安全性而被tls(就是https的加密標準)和ipsec(win採用的)作為技術標準。簡單地說,cbc使用密碼和salt(起擾亂作用)按固定演算法(md5)產生key和iv。然後用key和iv(初始向量,加密第一塊明文)加密(明文)和解密(密文)。

下面介紹python實現的aes加密解密例項,這裡採用cbc模式,用到了pycrypto‎模組

安裝:pip install crypto

pip install binascii

實現:#!/usr/bin/env python

# -*- coding:utf-8 -*-

#@author: rui.xu

#這裡使用pycrypto‎庫

#按照方法:easy_install pycrypto‎

from crypto.cipher import aes

from binascii import b2a_hex, a2b_hex

class prpcrypt():

def __init__(self,key):

self.key = key

self.mode = aes.mode_cbc

#加密函式,如果text不足16位就用空格補足為16位,

#如果大於16當時不是16的倍數,那就補足為16的倍數。

def encrypt(self,text):

cryptor = aes.new(self.key,self.mode,b'0000000000000000')

#這裡金鑰key 長度必須為16(aes-128),

#24(aes-192),或者32 (aes-256)bytes 長度

#目前aes-128 足夠目前使用

length = 16

count = len(text)

if count < length:

add = (length-count)

#\0 backspace

text = text + ('\0' * add)

elif count > length:

add = (length-(count % length))

text = text + ('\0' * add)

self.ciphertext = cryp程式設計客棧tor.encrypt(text)

#因為aes加密時候得到的字串不一定是ascii字符集的,輸出到終端或者儲存時候可能存在問題

#所以這裡統一把加密後的字串轉化為16進製制字串

return b2a_hex(self.ciphertext)

#解密後,去掉補足的空格用strip() 去掉

def decrypt(self,text):

cryptor = aes.new(self.key,self.mode,b'0000000000000000')

plain_text = cryptor.decrypt(a2b_hex(text))

return plain_text.rstrip('\0')

if __name__ == '__main__':

pc = prpcrypt('keyskeyskeyskeys') #初始化金鑰

import sys

e = pc.encrypt(sys.ar**[1]) #加密

d = pc.decrypt(e) #解密

print "加密:",e

print "解密:",d

valueerror: iv must be 16 bytes long            windows下缺省會報這個錯,

cryptor = aes.new(self.key,self.mode,b'0000000000000000')

例項化後面加上後面那個就ok了

ps:關於加密解密感興趣的朋友還可以參考本站**工具:

md5**加密工具:

程式設計客棧ssword

迅雷、快車、旋風url加密/解密工具:

**雜湊/雜湊演算法加密工具:

**md5/hash/sha-1/sha-2/sha-256/sha-512/sha-3/ripemd-160加密工具:

**sha1/sha224/sha256/sha384/sha512加密工具:

python實現AES演算法

usr bin python coding utf 8 from crypto.cipher import aes from binascii import b2a hex,a2b hex class aes 自己實現了乙個aes類,用於aes的加密和解密 def init self,key,mod...

python實現AES的加密解密

了解aes aes advanced encryption standard 是一種對稱加密演算法,相較於des和3des演算法而言,aes演算法有著更高的速度和資源使用效率,安全級別也較之更高 公式 c e k,p 明文p,金鑰k,aes加密函式組成e,密文c。主要要了解以下幾點 aes金鑰的長度...

AES金鑰編排Python實現

附上我的部落格鏈結 四元君 對想出aes的前輩大寫的佩服,光是寫了金鑰編排我就寫了一下午 這裡把aes講述一下,再把 過程總結一下 aes加密演算法涉及4種操作 位元組替代 subbytes 行移位 shiftrows 列混淆 mixcolumns 和輪金鑰加 addroundkey 我們這裡提及的...