本文主要是对aes加密技术做一个简要分析,然后使用Python实现,具体介绍如下。
AES,是美国联邦政府采用的一种加密技术,AES有几个模式,其中CBC模式是公认的安全性最好的模式,被TLS所采用。
加密与解密双方需确定好key,key的长度可以是16位,24位,32位中的一个,分别对应了不同的算法。
如果key的长度是是16位的,那么被加密的明文长度必须是16的整数倍,但实际使用中,这么巧的事情很难发生,因此就需要对明文进行填充,最常用的方式就是填充\0,等到解密的时候,再把解密出来的明文右侧的\0全部去掉。你也许会关心,如果我明文最右侧原本就是一堆的\0,那么这么搞,岂不是要出问题么,是滴,确实会出问题,但这样的明文用来做什么呢?你想多了,这样的明文你这辈子恐怕都不会遇到。
下面看一段python示例代码,演示如何使用AES加密技术进行加密和解密
#coding=utf-8 ''''' 加密的一方和解密的一方必须提前确定好key值 ''' from Crypto.Cipher import AES from binascii import b2a_hex, a2b_hex class MyCrypto(): def __init__(self, key): self.key_len = len(key) if not self.key_len == 16 and not self.key_len == 24 and not self.key_len == 32: raise Exception("length of key is wrong") self.key = key self.mode = AES.MODE_CBC #这种模式更加安全 def encrypt(self, text): ''''' 被加密的明文长度必须是key长度的整数倍,如果不够,则用\0进行填充 转成16进制字符串,是因为避免不可见的ascii在显示的时候捣乱 ''' cryptor = AES.new(self.key, self.mode, self.key) count = len(text) add = self.key_len - (count % self.key_len) text = text + ('\0' * add) self.ciphertext = cryptor.encrypt(text) return b2a_hex(self.ciphertext) def decrypt(self, text): ''''' 解密后需注意,加密时有可能填充\0,因此要去掉右侧的\0 ''' cryptor = AES.new(self.key, self.mode, self.key) plain_text = cryptor.decrypt(a2b_hex(text)) return plain_text.rstrip('\0') if __name__ == '__main__': mc = MyCrypto("kwsy_zds20160822") e = mc.encrypt("张东升") d = mc.decrypt(e) print e,d
总结
以上就是本文关于Python AES加密实例解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。