【Python实现AES加密】 -- 2019-08-12 12:41:45

原文: http://106.13.73.98/__/204/         AES(Advanced Encryption Standard)高级加密标准,在密码学中又被称为 Rijndael 加密法,是美国联邦*采用的一种区块加密标准。这个标准用来替代原先的 DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,AES由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,AES已经成为对称密钥加密中最流行的算法之一。         AES在软件硬件上都能快速地进行加密解密,相对来说较易于实作,且只需要很少的存储器。作为一个新的加密标准,目前正在被部署应用到更广大的范围。 __特点__ 1. 抵抗所有已知的攻击 2. 在多个平台上速度快,编码紧凑 3. 设计简单 __原理__ ![在这里插入图片描述](http://106.13.73.98/media/ai/2019-05/958162f6-80ef-4de5-8e36-c40db09562e4.png)         AES为分组密码,分组密码就是把明文分成一组一组的,没组长度相等,每次加密一组数据,直到加密完整个明文。在AES标准规范中,分组长度只能是128位,也就是说,每个分组为16字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。密钥的长度不同,推荐加密轮数也不同。一般常用的128位。 __基本用法__ ```python import binascii from Cryptodome.Cipher import AES from Cryptodome import Random # 准备要加密的数据 data = "数据库的密码是:123456" # 秘钥-Key,秘钥的长度必须为 16(AES-128)、24(AES-192)、32(AES-256) key = b'0' * 16 # 1. 生成长度等于AES块大小的不可重复的秘钥向量 iv = Random.new().read(AES.block_size) # 2. 使用 key 和 iv 初始化AES对象 cipher = AES.new(key, AES.MODE_CFB, iv) # 3. 加密的明文长度必须为16的倍数,如果长度不为16的倍数,则需要补充为16的倍数 # data += (16 - len(data) % 16) * '=' # 书上是这么说的,但我这里实测都没问题的 # 4. 加密数据 cipher_data = cipher.encrypt(data.encode()) print(binascii.b2a_hex(cipher_data)) # b'9b5e93ee68df40be7bd7bc08fa8ef21430ab6801cb4f7bf002e51a1bf7d6' # 5. 生成新的AES对象,该AES对象用于解密 decrypt = AES.new(key, AES.MODE_CFB, iv) # 6. 解密数据 decrypt_data = decrypt.decrypt(cipher_data) print(decrypt_data.decode()) # 数据库的密码是:123456 # 注意: # AES对象加密数据后不可再调用解密方法 # 一个AES对象只可解密一条数据 ``` 原文: http://106.13.73.98/__/204/
上一篇:leetcode 1309. Decrypt String from Alphabet to Integer Mapping


下一篇:iTOP4412开发板-使用buildroot搭建最简单的linux