高级加密标准(英语:advanced encryption standard,缩写:aes),在密码学中又称rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的des,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(nist)于2001年11月26日发布于fips pub 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。—百度百科

本科的时候弄过des加密算法加密计算机文件,而des加密算法现在基本处于被废弃的状态,所以现在想试试更高级一点的。

des加密算法可发展为3des加密算法,后来又被升级为aes加密算法,加长了密钥长度,也就增加了暴力破解的难度。

本次使用python进行aes的加密解密

import hashlib
from crypto.cipher import aes
import base64

class prpcrypt():
 def __init__(self,key):
  self.key = key # 因为在python3中aes传入参数的参数类型存在问题,需要更换为 bytearray , 所以使用encode编码格式将其转为字节格式(linux系统可不用指定编码)
  iv = 16 * '\x00'
  self.iv=iv.encode("utf-8")
  self.mode = aes.mode_cbc
  self.bs = aes.block_size
  self.pad = lambda s: s + (self.bs - len(s) % self.bs) * chr(self.bs - len(s) % self.bs)
  self.unpad = lambda s: s[0:-ord(s[-1])]

 # 加密
 def encrypt(self, text):
  text = self.pad(text).encode("utf-8")
  cryptor = aes.new(self.key, self.mode, self.iv)
  # 目前aes-128 足够目前使用(cbc加密)
  ciphertext = cryptor.encrypt(text)
  # base64加密
  return base64.b64encode(bytes(ciphertext))

 # 解密
 def decrypt(self, text):
  # base64解密
  text = base64.b64decode(text)
  cryptor = aes.new(self.key, self.mode, self.iv)
  # cbc解密
  plain_text = cryptor.decrypt(text)
  # 去掉补足的空格用strip() 去掉
  return self.unpad(bytes.decode(plain_text).rstrip('
import hashlib
from crypto.cipher import aes
import base64
class prpcrypt():
def __init__(self,key):
self.key = key # 因为在python3中aes传入参数的参数类型存在问题,需要更换为 bytearray , 所以使用encode编码格式将其转为字节格式(linux系统可不用指定编码)
iv = 16 * '\x00'
self.iv=iv.encode("utf-8")
self.mode = aes.mode_cbc
self.bs = aes.block_size
self.pad = lambda s: s + (self.bs - len(s) % self.bs) * chr(self.bs - len(s) % self.bs)
self.unpad = lambda s: s[0:-ord(s[-1])]
# 加密
def encrypt(self, text):
text = self.pad(text).encode("utf-8")
cryptor = aes.new(self.key, self.mode, self.iv)
# 目前aes-128 足够目前使用(cbc加密)
ciphertext = cryptor.encrypt(text)
# base64加密
return base64.b64encode(bytes(ciphertext))
# 解密
def decrypt(self, text):
# base64解密
text = base64.b64decode(text)
cryptor = aes.new(self.key, self.mode, self.iv)
# cbc解密
plain_text = cryptor.decrypt(text)
# 去掉补足的空格用strip() 去掉
return self.unpad(bytes.decode(plain_text).rstrip('\0')) # 解密字节???
def gen_binsha(data):
shavalue = hashlib.sha256()
shavalue.update(data)
return shavalue.digest()
if __name__ == '__main__':
key='78f40cecf89'
key=gen_binsha(key.encode('utf-8'))
pc = prpcrypt(key=key) # 初始化密钥 和 iv
text='qwerqwerkkk12345'
e = pc.encrypt(text) # 加密
d = pc.decrypt(e) # 解密
print("加密:%s" % e)
print("解密:%s"% d)
print("长度:%s"% len(d))
')) # 解密字节??? def gen_binsha(data): shavalue = hashlib.sha256() shavalue.update(data) return shavalue.digest() if __name__ == '__main__': key='78f40cecf89' key=gen_binsha(key.encode('utf-8')) pc = prpcrypt(key=key) # 初始化密钥 和 iv text='qwerqwerkkk12345' e = pc.encrypt(text) # 加密 d = pc.decrypt(e) # 解密 print("加密:%s" % e) print("解密:%s"% d) print("长度:%s"% len(d))

以上就是分享一个python的aes加密代码的详细内容,更多关于python的aes加密代码的资料请关注www.887551.com其它相关文章!