hello
python的加密工具包pycrypto 22 Oct 2014
Pycrypto
The Python Cryptography Toolkit
项目源码托管在github上,这个模块不仅提供了变量的加解密算法(AES, DES, RSA, ElGamal,etc.),还包含了稳固的hash函数(例如SHA256 和 RIPEMD160). 更重要的是使用非常简单
加密解密
数据打包
源数据的长度一般是block_size的倍数,可以引入一个打包函数,保证message的长度:
# 打包
def pad(data, block_size=16):
length = block_size - (len(data) % block_size)
data += chr(length)*length
return data
# 解包
def unpad(data)
return data[:-ord(data[-1])]
AES
from Crypto.Cipher import AES
key = b'the key 16 bytes'
iv = 'This is an IV456'
aes = AES.new(key, AES.MODE_CBC, iv)
message = "some_text"
encrypted_message = aes.encrypt(pad(message))
# encrtyed_message 就为加密后的信息
aes2 = AES.new(key, AES.MODE_CBC, iv)
org_message = unpad(aes2.decrypt(encrtyed_message))
# org_message 解密后的信息,也就是原始信息
这里注意AES.new(key, *args, **kwargs)
其中key只能是16,24或者32位字节,blocksize=16.上面代码中的iv,在MODEECB 和 MODECTR中不需要.在MODEOPENPGP中 加密使用blocksize长度的iv,解密使用blocksize +2 字节长度的iv.别的modes,iv是 blocksize 字节长度,自定义是blocksize长度个0.
DES
from Crypto.Cipher import DES3
from Crypto import Random
key = b'Sixteen byte key'
iv = Random.new().read(DES3.block_size)
cipher = DES3.new(key, DES3.MODE_OFB, iv)
plaintext = pad('sona si latine loqueris ', 8)
msg = iv + cipher.encrypt(plaintext)
DES3三重DES加密,安全性可以得到保证.
还有
Crypto.Cipher 还提供了ARC,CAST等多个加密算法模块
HASH
SHA256
from Crypto.Hash import SHA256
hash = SHA256.new()
hash.update('some text')
sha256 = hash.digest()
MD5
from Crypto.Hash import MD5
h = MD5.new()
h.update(b'Hello')
md5 = h.hexdigest()
另外
Crypto.Hash 也提供了HMAC,MD4等算法,详见官网
Random
高级一些的随机算法,比如下面这个:
from Crypto.Random import random
random.choice(['dogs', 'cats', 'bears'])
随机从list里面取一个.需要注意的是在使用os.fork()之后需要,调用Random.atfork()来保证随机性.
最后
pycrypto包含了丰富的加密, 随机,hash算法,使用相当方便.