MD5加密
这是一种使用非常广泛的加密方式,不可逆的,在日常字符串加密中经常会用到,下面我简单介绍一下这种方式,主要用到Python自带的模块hashlib,测试代码如下,先创建一个md5对象,然后直接加密就行:
import hashlib
def MD5(string):
'''md5加密'''
h1 = hashlib.md5() # 创建md5对象
# 声明encode
h1.update(string.encode(encoding = 'utf-8'))
return h1.hexdigest()
if __name__ == "__main__":
string = "MD5加密"
print('MD5加密前为:' + string)
print('MD5加密后为:' + MD5(string))
运行结果:
MD5加密前为:MD5加密
MD5加密后为:e5c7bda34849527574a025bc06867c11
哈希加密
这里以SHA1(安全哈希)为例,简单介绍一下Python是如何进行哈希加密的,也用到hashlib这个模块,测试代码如下,非常简单,先创建sha1对象,然后直接加密就行,这里也支持 SHA224,SHA256等加密方式:
import hashlib
def hash(string):
'''哈希加密'''
h1 = hashlib.sha1() # 创建hash对象
# 声明encode
h1.update(string.encode(encoding = 'utf-8'))
return h1.hexdigest()
if __name__ == "__main__":
string = "MD5加密"
print('MD5加密前为:' + string)
print('MD5加密后为:' + hash(string))
运行结果:
hash加密前为:MD5加密
hash加密后为:983bb73e82bd715e65584ea6580bad4ec321c0f4
DES加密
这是一个分组加密算法,解密和加密是同一个算法,下面我简单介绍一下这种方式,主要用到pycryptodome这个模块,输入安装命令pip install pycryptodomex
,测试代码如下,需要单独定义一个密钥:
from Cryptodome.Cipher import DES
import binascii
# 设置一个密钥
key = b'abcdefgh'
# 需要去生成一个DES对象
des = DES.new(key,DES.MODE_ECB)
# 需要加密的数据
text = "This is a key!"
text = text + (8 - (len(text) % 8)) * '='
print("text:%s" % text)
# DES加密过程
encrypt_text = des.encrypt(text.encode())
encrypt_text = binascii.b2a_hex(encrypt_text)
print("DES加密后:" + encrypt_text.decode())
# DES解密过程
decrypt_text = binascii.a2b_hex(encrypt_text)
decrypt_text = des.decrypt(decrypt_text)
print("DES解密后:" + decrypt_text.decode())
运行结果:
text:This is a key!==
DES加密后:a5ee554e36736a5d9b6db2cd9442ff38
DES解密后:This is a key!==
AES加密
这也是一种广泛使用的加密方法,是对DES的改进和替代,下面我简单介绍一下这种方式,也用到pycryptodome这个模块,测试代码如下,稍微有些复杂
from Cryptodome.Cipher import AES
from Cryptodome import Random
from binascii import b2a_hex
# 密钥
key = b'This is a 16 key'
# 要加密的明文
data = "AES加密"
# 生成长度等于AES块大小的不可重复的密钥向量
iv = Random.new().read(AES.block_size)
# 使用key和iv初始化AES对象,使用MODE_CFB模式
mycipher = AES.new(key,AES.MODE_CFB,iv)
# 加密的明文长度必须为16的倍数
# 将iv(密钥向量)加到加密的密文开头,一起传输
ciphertext = iv + mycipher.encrypt(data.encode())
# 解密的话要使用key和iv生成新的AES对象
mydecrypt = AES.new(key,AES.MODE_CFB,ciphertext[:16])
# 使用新生成的AES对象,将加密的密文解密
decrypttext = mydecrypt.decrypt(ciphertext[16:])
print("ASD加密后:",b2a_hex(ciphertext)[16:])
print("ASD解密后:",decrypttext.decode())
运行结果:
ASD加密后: b'18541e53ebfe5eef40d3d4631dc3c313d4'
ASD解密后: AES加密
RAS加密
这是一种非对称加密算法,在公开密钥加密和电子商业中经常会用到,下面我简单介绍一下这种方式,主要用到rsa这个模块,安装命令pip install rsa
,测试代码如下,需要单独定义一个公钥和私钥
import rsa
key = rsa.newkeys(3000) # 生成随机密钥
privateKey = key[1] # 私钥
publicKey = key[0] # 公钥
message = "RSA加密" # 要加密的明文
message = message.encode()
# RSA加密过程
cryptedMessage = rsa.encrypt(message,publicKey)
print("RSA加密后:",cryptedMessage)
# RSA解密过程
message = rsa.decrypt(cryptedMessage,privateKey)
message = message.decode()
print("RSA解密后:",message)
运行结果:
RSA加密后: b"x04xf2xafxbbxe1xffWxd5xabT`.xd8x02xa7x85xdawFx15Qx88xd9xafx9bxb7@gbx8ax81xcex8c2GCV;
x8ax91NFxd8xb5x99x0bxc5xf9xbax94xd4lx8bxa9axd5x80x98xdebxcbxf9Nx8c'Yx9cXxcaxf5$x07Ax1a@xb6-xc7xb22iNu0xf6x800x9d Bx93xe2xa5Pxe7'+1*x8aLVxcacxd6x81xfbx0bxeexe9x8bxc4K\x0c/x80x184Tx80xx87xdcxb3=x12x97x8cxa6xecXFx92x87m$x8ex1cxe7x93;1x9a;n`xd8xdb|xbfWx04xfcxbbxec&x8bx91%xd6x12Qexa9x84xd1x0cxacxd7xabGx945W7x12xaexf3#xd4xf9xaed^Cxae'wx8aMx01
xf9x80x1e l4x1c)\x98x01]e+[cxf34x99{7xa5.xefSxd6x99xfax9fx7fxe0x9bxa2xf9<p0%xa1iGx02xf9x0coxdexdaxabx96`yxb8xb0xe8xd0 xa9xa1x97@xe7x06xa8xacx19-[Wxefx0fRxb7\Hx0bx15^x0e@x86gxb8xc8U=xe7xffx06
x93<Pxc3xa4xa5
x8e5xef+Dx9cM?x1bx11Tx8fxa2xb9xa4,x03nx1exd0xbcx1ftxabx879x11xe9x01xffJxf9x87xb4/jxf1Ox14x19xacx8axb8Cxe5~oxa9]xca,xe4xe6x18rxd9x8f]xa1xf8Gxedx8cxb6Fx9fxabux12xc3x93xf2] XOxb0*xadH0gx88x0cxb9"
RSA解密后: RSA加密