高階加密標準(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 我們這裡提及的...