继续创造,加快成长!这是我参加「日新方案 10 月更文应战」的第25天,点击查看活动概况

PyCryp库

PyCrypto可以做什么?在pypi的下载与介绍页面给出了几个比如。接下来咱们就经过这些比如展现 PyCrypto的强大之处。

例一:

SHA—256算法归于密码SHA—2系列哈希。它产生了一个消息的256位摘要。

哈希值用作表明很多数据的固定大小的唯一值。两组数据的哈希值仅在相应数据也匹配时才应当匹配。 数据的少量更改会在哈希值中产生不行预知的很多更改。

接下来的比如演示SHA256 模块的使用。

from Crypto.Hash import SHA256
hash=SHA256.new()
hash.update(b'message')
h=hash.digest()
hash.hexdigest() 
print(h)

履行程序:

PyCryp  库

这个字符串就是将“message”加密之后得到的。当然,咱们也可以将其转换为16进制的字符串。只需 要将 digest()办法替换为hexdigest()办法即可。

再次履行程序:

PyCryp  库

例二:

AES 英语:Advanced Encryption Standard,的缩写,高档加密规范,是现在非常盛行的加密算法之一。 加下来经过比如演示AES算法的加密与解密。

加密:

PyCryp  库

from Crypto.Cipher import AES
#加密
obj = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')
message = "The answer is no"
ciphertext = obj.e
iphertext = obj.encrypt(message)
print(ciphertext)

'This is a key123' 为key,他的长度有严格要求,有必要为16、24或32位,不然,将会看到下面的错误。

ValueError: AES key must be either 16, 24, or 32 bytes long

'This is an IV456'为VI,他的长度要求更加严格,只能为16位。不然,你将会看到下面的错误。ValueError: IV must be 16 bytes long

然后,经过 encrypt0办法对“message”字符串进行加密。然后,经过打印将会得到:

PyCryp  库

解密:

当接收到加密的字符串后,解密者有必要知道加密时所用的key和vi才能正可以解密。

from Crypto.Cipher import AES
...
#解密
obj2 = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')
s = obj2.decrypt(ciphertext)
print(s)

经过 decrypt()办法对加密后的字符串进行解密。

fnngj@fnngj-pc:~/pydj$ python3 crypto_demo.py
b'The answer is no'

假如key和VI错误将无法得到正确的字符串。例如,把key 修改为:'This is a key888',解密失利,咱们将会得到另一个加密串:

b'\xb1\xf7\xc2\x9d\xf7|&\x05\x89\\xa7\x17\x16\x06\x9b\xf4'

除此之外,PyCrypto还供给一个强大的随机算法。

from Crypto.Random import random
r= random.choice(['dogs', 'cats', 'bears'])
print(r)