【Python】AES加密/解密,RSA加密/解密

AES简介(摘自维基百科)

高级加密标准(英语:Advanced Encryption Standard,缩写:AES),又称Rijndael加密法(荷兰语发音: [ˈrɛindaːl],音似英文的“Rhine doll”),是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。现在,高级加密标准已然成为对称密钥加密中最流行的算法之一。
该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijndael为名投稿高级加密标准的甄选流程。

RSA简介(摘自维基百科)

RSA(Rivest–Shamir–Adleman)是一种广泛用于安全数据传输的公钥密码系统。它也是最古老的建筑之一。缩写“RSA”来自Ron Rivest、Adi Shamir和Leonard Adleman的姓氏,他们在1977年公开描述了该算法。1973年,英国数学家Clifford Cocks在GCHQ(英国信号情报机构)秘密开发了一个类似的系统。该系统于1997年被解密
在公钥密码系统中,加密密钥是公开的,与保密(私密)的解密密钥不同。RSA用户基于两个大素数以及一个辅助值创建并发布公钥。素数是保密的。任何人都可以通过公钥对消息进行加密,但只能由知道素数的人解码。[2]
RSA的安全性依赖于对两个大素数的乘积进行因子分解的实际困难,即“因子分解问题”。破坏RSA加密称为RSA问题。它是否像保理问题一样困难是一个悬而未决的问题。[3] 如果使用足够大的密钥,则没有公开的方法可以击败系统。
RSA是一种相对较慢的算法。因此,它通常不用于直接加密用户数据。更常见的是,RSA用于传输对称密钥加密的共享密钥,然后用于批量加密-解密。

需要准备的东西

算法名 安装方式
AES python -m pip install pycryptodome
RSA python -m pip install rsa

开始编写

from Crypto.Cipher import AES
import rsa

''' ========= AES =========
	这些是加密模式
		MODE_CBC, MODE_CCM, MODE_CFB, MODE_CTR,
		MODE_EAX, MODE_ECB, MODE_GCM, MODE_OCB,
		MODE_OFB, MODE_OPENPGP, MODE_SIV
	Key的长度可以是以下任意值(单位: 位 bit)
		128  192  256
	iv的长度只能是 128bit
'''
# 由于我使用其他加密模式有心理阴影,所以这里使用CFB模式

# 编写加密函数
def aes256_encrypt(data :bytes, key :bytes, iv :bytes):
    aes_ctx = AES.new(key = key, mode = AES.MODE_CFB, IV = iv)
    return aes_ctx.encrypt(data)

# 编写解密函数
def aes256_decrypt(data :bytes, key :bytes, iv :bytes):
    aes_ctx = AES.new(key = key, mode = AES.MODE_CFB, IV = iv)
    return aes_ctx.decrypt(data)

##########################我-是-分-割-线#################################
''' ========= RSA =========
	密钥长度必须大于需要处理的数据长度,如下
		数据长度:32                (单位: 字节 bytes)
		密钥长度:(数据长度 + 11) * 8(单位: 位 bit)
	
	pk  ==  publicKey
	sk  ==  privateKey
'''
# 首先需要生成密钥,或是本地保存的密钥数据

# 生成密钥
# N 为密钥长度(单位:位 bit)
pk, sk = rsa.newkeys(1024)

# 使用本地
# pk_data 为本地密钥文件的数据
# sk_data 同理
pk = rsa.PublicKey.load_pkcs1(pk_data)
sk = rsa.PrivateKey.load_pkcs1(sk_data)

# 加密/解密函数
rsa.encrypt(content :bytes, publicKey)
rsa.decrypt(content :bytes, PrivateKey)

'''
其实你也可以使用私钥加密,公钥解密
'''

猜你喜欢

转载自blog.csdn.net/qq_37435462/article/details/127478458