实战要求:给自己的密码加密:密码加密小工具
对于部分喜欢将自己密码存在邮箱、网盘等容易被盗的朋友,可以自己记住一个唯一的密钥,通过这个小程序和密钥产生一串加密密文再存储,减少密码被盗几率。提示:Crypto库,要求:a.输入自己的秘钥:123456,b.选择是: encrypt 或者decrypt, c. 输出:加密后的密文,或者解密后的明文)
高级加密标准(Advanced Encryption Standard,AES),是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。
经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级
加密标准已然成为对称密钥加密中最流行的算法之一。AES只是个基本算法,实现AES有若干模式。其中的CBC模式因为其安全性而被TLS(就是https的加密标准)和IPSec(win采用的)作为技术标准。简单地说,CBC使用密码和salt(起扰乱作用)按固定算法(md5)产生key和iv。然后用key和iv(初始向量,加密第一块明文)加密(明文)
和解密(密文)我们需要使用的就是Crypto模块中的AES模块:
样例代码:
>>> from Crypto.Cipher import AES #引入AES模块
>>> obj = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')
>>> message = "The answer is no"
>>> ciphertext = obj.encrypt(message)
>>> ciphertext
'\xd6\x83\x8dd!VT\x92\xaa`A\x05\xe0\x9b\x8b\xf1'
>>> obj2 = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')
>>> obj2.decrypt(ciphertext)
'The answer is no'
AES.new(key,AES.MODE_CBC,iv)这个函数的用法:key指的是自己指定的加密的初始密钥,AES.MODE_CBC 指的是加密的模式是CBC,iv指的是初始向量,加密第一块明文)加密(明文)和解密(密文)。这里的obj对象就生成了我们自己设定的加密方式,在调用obj对象的encrypt(加密)和decrypt(解密)方法,即可实现加密解密。
from Crypto.Cipher import AES
from binascii import b2a_hex,a2b_hex
class prpcrypt(): #定义一个类
def __init__(self,key):
self.key=key
self.mode=AES.MODE_CBC
def encrypt(self,text):
cryptor=AES.new(self.key,self.mode,self.key)
x = len(text) % 16
if x != 0:
text = text + '0' * (16 - x) #不满16,32,64位补0
self.ciphertext=cryptor.encrypt(text)
return b2a_hex(self.ciphertext)
def decrypt(self,text):
cryptor=AES.new(self.key,self.mode,self.key)
plain_text=cryptor.decrypt(a2b_hex(text))
return plain_text.rstrip('\0')
pc=prpcrypt('tecentbluewhaleA') #自己设定的密钥
e=pc.encrypt("123456")
d=pc.decrypt(e)
print e,d
e=pc.encrypt("gffvdfshf")
d=pc.decrypt(e)
print e,d
这之中能还需要学习一下python中类的定义和使用方法,注意初始密钥key必须是16位的。