Python AES加密实例解析

本文主要是对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加密实例解析 的全部内容, 来源链接: utcz.com/z/344665.html

回到顶部