事关rsa加密

事关RSA加密

     


事情是这样的,这几天在搞rsa加密, 于是研究了一下。本本将介绍非对称加密、python实现rsa加解密的方法、rsa的填充方法

非对称加密

相对比较安全,rsa 加密是非对称加密的一种。

        原理:非对称加密依赖与明文经过与公钥进行数学运算可得出密文,而密文经过与密钥进行数学运算又可得到明文。

        用途:非对称加密算法的优点是密钥分发简单,但缺点也是很明显的,其加解密过程依赖于数学运算运算量大所以加解密速度慢(另外同样的密钥强度其安全性弱于对称加密算法),其只适用于少量内容的加解密,最典型的就是https中用于完成对称密钥的交换(即openssl的rsa的加解密)。

拓展:https中的s是结合了对称加密(一个密钥)+非对称加密(公钥+私钥), 具体是:发送方将 对称加密的密钥 通过非对称加密发送接收方, 接收方通过非对称加密来解密,然后得到对称加密的密钥,然后再用对称密钥进行加密消息。

rsa的填充方法

        1.RSA_PKCS1_PADDING 填充模式, 比钥模长(modulus) 短至少11个字节, 也就是 RSA_size(rsa) – 11

2.RSA_PKCS1_OAEP_PADDING,比钥模长(modulus) 短至少41个字节, 也就是 RSA_size(rsa) – 41

3.RSA_NO_PADDING , 和钥模长(modulus)一样长度

python实现rsa加解密的方法

1.使用  pycryptodome 包

pip3 install pycryptodome

from Crypto.PublicKey import RSA  # 导入rsa
from Crypto.Cipher import PKCS1_OAEP  # 导入填充模式
#加密
public_key = RSA.import_key(open("public.key","rb").read())
cipher = PKCS1_OAEP.new(public_key)  
data = open("hello.txt", "rb").read()  # 用二进制读取待加密文件
en_data = cipher.encrypt(data)    # 输出为加密之后的二进制表示

#解密
private_key = RSA.import_key(open("private.key","rb").read())
cipher = PKCS1_OAEP.new(private_key)
encrypted_data = open("hello_de.txt","rb").read()  # 待解密文件
data = cipher.decrypt(encrypted_data)
print(data.decode())

2.使用openssl加解密

根据公钥rsa_private_key 生成 加密数据test.txt.enc
openssl rsautl -in test.txt -out test.txt.enc -inkey rsa_public_key.pem -pubin -encrypt -pkcs


使用私钥rsa_private_key.pem对加密后的数据test.txt.enc进行解密,并将结果存放到text.txt.dec文件中:
openssl rsautl -in test.txt.enc -out test.txt.dec -inkey rsa_private_key.pem -decrypt -pkcs

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值