生活中我们经常会遇到一些加密算法,今天我们就聊聊这些加密算法的Python实现。部分常用的加密方法基本都有对应的Python库,基本不再需要我们用代码实现具体算法。
MD5加密
全称:MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。md5加密算法是不可逆的,所以解密一般都是通过暴力穷举方法,通过网站的接口实现解密。Python代码:
import hashlib m = hashlib.md5() m.update(str.encode("utf8")) print(m.hexdigest())
SHA1加密
全称:安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA),SHA1比MD5的安全性更强。对于长度小于2^ 64位的消息,SHA1会产生一个160位的消息摘要。Python代码:
import hashlib sha1 = hashlib.sha1() data = '2333333' sha1.update(data.encode('utf-8')) sha1_data = sha1.hexdigest() print(sha1_data)
HMAC加密
全称:散列消息鉴别码(Hash Message Authentication Code), HMAC加密算法是一种安全的基于加密hash函数和共享密钥的消息认证协议。实现原理是用公开函数和密钥产生一个固定长度的值作为认证标识,用这个标识鉴别消息的完整性。使用一个密钥生成一个固定大小的小数据块,即 MAC,并将其加入到消息中,然后传输。接收方利用与发送方共享的密钥进行鉴别认证等。Python代码:
import hmac import hashlib # 第一个参数是密钥key,第二个参数是待加密的字符串,第三个参数是hash函数 mac = hmac.new('key','hello',hashlib.md5) mac.digest() # 字符串的ascii格式 mac.hexdigest() # 加密后字符串的十六进制格式
DES加密
全称:数据加密标准(Data Encryption Standard),属于对称加密算法。DES是一个分组加密算法,典型的DES以64位为分组对数据加密,加密和解密用的是同一个算法。它的密钥长度是56位(因为每个第8 位都用作奇偶校验),密钥可以是任意的56位的数,而且可以任意时候改变。Python代码:
import binascii from pyDes import des, CBC, PAD_PKCS5 # 需要安装 pip install pyDes def des_encrypt(secret_key, s): iv = secret_key k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5) en = k.encrypt(s, padmode=PAD_PKCS5) return binascii.b2a_hex(en) def des_decrypt(secret_key, s): iv = secret_key k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5) de = k.decrypt(binascii.a2b_hex(s), padmode=PAD_PKCS5) return de secret_str = des_encrypt('12345678', 'I love YOU~') print(secret_str) clear_str = des_decrypt('12345678', secret_str) print(clear_str)
AES加密
全称:高级加密标准(英语:Advanced Encryption Standard),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。Python代码:
import base64 from Crypto.Cipher import AES ''' AES对称加密算法 ''' # 需要补位,str不是16的倍数那就补足为16的倍数 def add_to_16(value): while len(value) % 16 != 0: value += '