AES加密方式有五种:ECB, CBC, CTR, CFB, OFB
从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现
python 在 Windows 下使用AES时要安装的是pycryptodome 模块 pip install pycryptodome
python 在 Linux 下使用AES时要安装的是pycrypto模块 pip install pycrypto
CBC加密需要一个十六位的key(密钥)和一个十六位iv(偏移量)
ECB加密不需要iv
```pythonCBC 加密的python实现```python1 from Crypto.Cipher import AES2 from binascii import b2a_hex, a2b_hex345 # 如果text不足16位的倍数就用空格补足为16位6 def add_to_16(text):7 if len(text.encode('utf-8')) % 16:8 add = 16 - (len(text.encode('utf-8')) % 16)9 else:10 add = 011 text = text + ('\0' * add)12 return text.encode('utf-8')131415 # 加密函数16 def encrypt(text):17 key = '9999999999999999'.encode('utf-8')18 mode = AES.MODE_CBC19 iv = b'qqqqqqqqqqqqqqqq'20 text = add_to_16(text)21 cryptos = AES.new(key, mode, iv)22 cipher_text = cryptos.encrypt(text)23 # 因为AES加密后的字符串不一定是ascii字符集的,输出保存可能存在问题,所以这里转为16进制字符串24 return b2a_hex(cipher_text)252627 # 解密后,去掉补足的空格用strip() 去掉28 def decrypt(text):29 key = '9999999999999999'.encode('utf-8')30 iv = b'qqqqqqqqqqqqqqqq'31 mode = AES.MODE_CBC32 cryptos = AES.new(key, mode, iv)33 plain_text = cryptos.decrypt(a2b_hex(text))34 return bytes.decode(plain_text).rstrip('\0')353637 if __name__ == '__main__':38 e = encrypt("hello world") # 加密39 d = decrypt(e) # 解密40 print("加密:", e)41 print("解密:", d)
AES ECB加密的python实现
1 """2 ECB没有偏移量3 """4 from Crypto.Cipher import AES5 from binascii import b2a_hex, a2b_hex678 def add_to_16(text):9 if len(text.encode('utf-8')) % 16:10 add = 16 - (len(text.encode('utf-8')) % 16)11 else:12 add = 013 text = text + ('\0' * add)14 return text.encode('utf-8')151617 # 加密函数18 def encrypt(text):19 key = '9999999999999999'.encode('utf-8')20 mode = AES.MODE_ECB21 text = add_to_16(text)22 cryptos = AES.new(key, mode)2324 cipher_text = cryptos.encrypt(text)25 return b2a_hex(cipher_text)262728 # 解密后,去掉补足的空格用strip() 去掉29 def decrypt(text):30 key = '9999999999999999'.encode('utf-8')31 mode = AES.MODE_ECB32 cryptor = AES.new(key, mode)33 plain_text = cryptor.decrypt(a2b_hex(text))34 return bytes.decode(plain_text).rstrip('\0')353637 if __name__ == '__main__':38 e = encrypt("hello world") # 加密39 d = decrypt(e) # 解密40 print("加密:", e)41 print("解密:", d)
