Python实战小程序——密码加密小工具(Crypto库)

来源:互联网 发布:给老人买什么好 知乎 编辑:程序博客网 时间:2024/06/10 07:40
实战要求:给自己的密码加密:密码加密小工具

       对于部分喜欢将自己密码存在邮箱、网盘等容易被盗的朋友,可以自己记住一个唯一的密钥,通过这个小程序和密钥产生一串加密密文再存储,减少密码被盗几率。提示: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 AESfrom binascii import b2a_hex,a2b_hexclass 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,de=pc.encrypt("gffvdfshf")d=pc.decrypt(e)print e,d

这之中能还需要学习一下python中类的定义和使用方法,注意初始密钥key必须是16位的。



0 0
原创粉丝点击