加密与解密使用同一个密钥的加密方式叫做对称加密,使用不同密钥加密的是非对称加密。
相对于非对称加密来说,对称加密的速度更快。适合大量数据加密的场景。
常见的对称加密算法有:DES、3DES、BLOWFISH、RC5和AES等。目前应用广泛强度最高的是AES。
加密过程:输入明文 —> AES加密算法 ---->输出密文
| |
|
| |
密钥key |
| |
| |
输出明文 <— AES解密算法 <------------
密钥是整个过程最关键的部分,只有拿到加密时使用的密钥才能将密文转换为加密前的明文。
密钥的长度可以是128位、192位、256位,长度越大,需要运算的轮次就越多。
替换操作:通过非线性函数将state中的字节替换成S-box中表中对应的字节。
行位移操作:将state中每行的字节按照规律进行位移。
列混合操作:通过线性函数对state中的列进行混合。
按位异或操作:将128位的轮密钥与state中的数据惊醒按位异或或操作。
from Crypto.Cripher import AES
#初始化AES对象传入密钥,加密模式和iv
ases1 = AES.new('15sa48wq45a48wef',AES.MOOE_CBC,'0q30weq02qw252sx')
#待加密消息
message = "this is a article"
print('待加密的消息:%s'%message)
cipher_text = ases1.encrypt(message)
#初始化AES对象是传入与加密相同的密钥、加密方式、iv
aes2 = AES.new('15sa48wq45a48wef',AES.MOOE_CBC,'0q30weq02qw252sx')
#解密操作
plaint_text = aes2.decrypt(cipher_text)
print('密文:%s'%cipher_text)
print('明文:%s'%plaint_text.decode('utf8'))