重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
aes在python中怎么实现一个加密功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
“专业、务实、高效、创新、把客户的事当成自己的事”是我们每一个人一直以来坚持追求的企业文化。 成都创新互联公司是您可以信赖的网站建设服务商、专业的互联网服务提供商! 专注于成都网站制作、网站建设、外贸网站建设、软件开发、设计服务业务。我们始终坚持以客户需求为导向,结合用户体验与视觉传达,提供有针对性的项目解决方案,提供专业性的建议,创新互联建站将不断地超越自我,追逐市场,引领市场!高级加密标准(英语: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('\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))
看完上述内容,你们掌握aes在python中怎么实现一个加密功能的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!