采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用。
所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。
对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES等。
目前最常用的非对称加密算法是RSA算法。
#encoding:utf-8
from Crypto.Cipher import AES
import base64
class prpcrypt():
def __init__(self, key):
#这里密钥key 长度必须为16(AES-128)、24(AES-192)、或32(AES-256)Bytes 长度.
#目前AES-128足够用
if len(key)<16:
key=key+(16-len(key))*"\0"
self.key = key[:16]
self.mode = AES.MODE_CBC
#加密函数,如果text不是16的倍数【加密文本text必须为16的倍数!】,那就补足为16的倍数
def encrypt(self, text):
cryptor = AES.new(self.key, self.mode, IV=self.key)
length = 16
count = len(text)
add=count % length
if add:
text = text + ('\0' * (length-add))
self.ciphertext = cryptor.encrypt(text)
#因为AES加密时候得到的字符串不一定是ascii字符集的,输出到终端或者保存时候可能存在问题
#所以这里统一把加密后的字符串用base64转化
return base64.b64encode(self.ciphertext)
#解密后,去掉补足的'\0'用strip() 去掉
def decrypt(self, text):
cryptor = AES.new(self.key, self.mode, IV=self.key)
plain_text = cryptor.decrypt(base64.b64decode(text))
return plain_text.rstrip('\0')
if __name__ == '__main__':
key='keys'*10
pc = prpcrypt(key)
e = pc.encrypt("8")
print e
d = pc.decrypt(e)
print d