python实现RSA非对称加密

python实现RSA非对称加密

关于RSA:

RSA是在在1977年由麻省理工学院的三位数学家Rivest、Shamir 和 Adleman一起提出的一种加密算法,取这三个人的姓氏的开头命名。
RSA是一种非对称加密算法。RSA密钥分为公钥和私钥。
• 使用公钥加密的数据,利用私钥进行解密。
• 使用私钥加密的数据,利用公钥进行解密。
公私钥事实上就是一组数字。其二进制的长度允许自己设定,一般为1024位及其以上。1024位以下不建议使用,其密钥长度越长,其加密强度越大。
RSA相对其他加密算法更为安全可靠,缺点是速度较慢。

关于RSA密钥长度、明文长度和密文长度

一般都说明文长度(字节)<= 密钥长度(字节)-11(字节),也就是说1024bits的密钥能加密的明文长度为117(字节)。
密文长度一般都等于密钥的长度。解密时一般要求密文长度<=密钥长度即可
当明文或者密文的长度超过限制时,就需要使用分段加解密了。(其实就是把数据裁开来加解密然后拼接。。)

python实现

以前python都是用的pycrypto模块去做的加解密,但是没人维护了现在被pycryptodome代替了。用法相同
能实现大致3种类型的数据加密(单向加密、对称加密、非对称加密)、产生随机数、生成密钥对、数字签名
a. 单向加密模块: Crypto.Hash 其中中包含MD5、SHA1、SHA256等
b. 对称加密:Crypto.Cipher 如常见的DES等
c. 对称加密:Crypto.Cipher 如常见的AES等
d. 随机数操作:Crypto.Random 生成随机数,可以用内置模块random产生。
e. 生成密钥对:Crypto.PublicKey 支持生成RSA算法的密钥对生成
f. 数字签名与验证:可能需要使用到Crypto.PublicKey,Crypto.Hash,Crypto.Signature。

代码实例

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP


key = RSA.generate(2048) # 实例化密钥对,密钥长度为2048bits
# 生成的私钥公钥都是bytes的数据,这里密钥转不转str都可以 .decode()默认用utf-8把bytes转str
# 私钥 解密
private_key = key.export_key().decode()
print(private_key, len(private_key),type(private_key))
# 公钥 加密
public_key = key.publickey().export_key().decode()
print(public_key, len(public_key),type(public_key))

# string.encode() 直接以默认的utf-8编码string为bytes
data = "13187090328"
# 实例化加密套件
public_key = RSA.importKey(public_key)
cipher = PKCS1_OAEP.new(public_key)
# 加密
c_data = cipher.encrypt(data.encode())
print(c_data,len(c_data))
# 解密
private_key = RSA.importKey(private_key)
d_cipher = PKCS1_OAEP.new(private_key) # 解密套件
org_data = d_cipher.decrypt(c_data)
print(org_data.decode())

输出如图
在这里插入图片描述
🔲有待考证
然后这里我实验时发现,加密的数据需要转换成bytes的,不然会报错,但是在前端不会这样。可能是代码的问题
✅然后实现分段加解密的话逻辑比较简单,就是循环加密,循环次数就是分段次数。因为代码比较长,就不贴了,可以自己写,逻辑很简单。
以上,不是很了解密码学,有啥说得不对可以指出改正,一起学习

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值