当前位置:首页 > 经验 >

rsa加密解密教程(rsa算法的加密和解密步骤)

来源:原点资讯(www.yd166.com)时间:2022-10-30 02:05:10作者:YD166手机阅读>>

Python3 RSA加密解密封装1.RSA简介

RSA公开密钥密码体制是一种使用不同的加密密钥与解密密钥,“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制 。

在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK 。

正是基于这种理论,1978年出现了著名的RSA算法,它通常是先生成一对RSA密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。这就使加密的计算量很大。为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式,即信息采用改进的DES或IDEA对话密钥加密,然后使用RSA密钥加密对话密钥和信息摘要。对方收到信息后,用不同的密钥解密并可核对信息摘要 。

RSA是被研究得最广泛的公钥算法,从提出到现在已近三十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。1983年麻省理工学院在美国为RSA算法申请了专利 。 RSA允许你选择公钥的大小。512位的密钥被视为不安全的;768位的密钥不用担心受到除了国家安全管理(NSA)外的其他事物的危害;1024位的密钥几乎是安全的。RSA在一些主要产品内部都有嵌入,像 Windows、网景 Navigator、 Quicken和 Lotus Notes 。

RSA公开密钥密码体制的原理是:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

[以上文字摘自百度百科]

2.在Python3环境下对RSA加密解密的封装

在实际软件开发中,我们通常需要对公钥、私钥、明文、密文数据进行保存,在保存时,最方便的方法就是使用字符串,而在RSA加密解密过程中,都是使用字节码来进行处理的,所以我们对其进行封装,采用面向对象的方法进行程序设计,使最终使用者能够通过简单的方法就可以实现对文本的加密和解密。

使用python库rsa

pip install rsa

封装代码如下:

# coding: utf-8 import rsa import base64 class Rsacrypt: def __init__(self): self.__pubkey = None self.__prikey = None # 生成公钥和私钥 def genKey(self, size): self.__pubkey, self.__prikey = rsa.newkeys(size) # 获取公钥字符串 def getPubKey(self): pub = self.__pubkey.save_pkcs1() return pub.decode('utf-8') # 获取私钥字符串 def getPriKey(self): pri = self.__prikey.save_pkcs1() return pri.decode('utf-8') # 设置公钥 def setPubKey(self, s_pub): self.__pubkey = rsa.PublicKey.load_pkcs1(s_pub.encode('utf-8')) # 设置私钥 def setPrikey(self, s_pri): self.__prikey = rsa.PrivateKey.load_pkcs1(s_pri.encode('utf-8')) # 公钥加密 def encrypt(self, text): ciphertext = rsa.encrypt(text.encode(), self.__pubkey) return base64.b64encode(ciphertext).decode('utf-8') # 私钥解密 def decrypt(self, text): decrypt_text = rsa.decrypt(base64.b64decode(text.encode('utf-8')), self.__prikey) return decrypt_text.decode()3.测试

if __name__ == '__main__': rsacrypt = Rsacrypt() rsacrypt.genKey(1024) print(rsacrypt.getPubKey()) print(rsacrypt.getPriKey()) text='hello-world' m = rsacrypt.encrypt(text) print(m) n = rsacrypt.decrypt(m) print(n) m = 'JIT/zVT5E1wOM5bXQTkwW4zjn1ulq4hy4eWvteZnfuUP2EoFGME3vPDwm4Asp/tVFRjiVzx3QH/xr9efjafwow==' s_pri = '''-----BEGIN RSA PRIVATE KEY----- MIIBOAIBAAJAdWnnOffxB6nlsttZk4E65xqz2jwl/ws8LiAnmbvi7No2c4FuFU5S Y/X Q3letj1yjEicPF37JAr/KAMRkTctLwIDAQABAkA6LeHPjZY3b 5Ls/ks6Aoh 3c9kwg0p1Y1aZcB5ouoM5l8g0wVMJjH7CcpU6wYXO3k/Wh5FF3lOr0jR c9lakaR AiEAvqpa5WNSp/VDTZ5olS1pl7fJCJCd6m2L0ih8XCSRj1UCIQCdpbjcjD3 hV86 M5l1byW99IZoHUlbQWUF6z7dqqCicwIgIiG06 N/5HlPdxGofywF/xbzcgkRe no YdLFkGkrdZECICcYm1Du4s0FTImFlHBAQU7rno2hfbjI7gHaxnt4vl rAiBB71Go NejfZGk7vEvinzeB/H03lXdsqm3bgyEc7xkTog== -----END RSA PRIVATE KEY-----''' rsacrypt.setPrikey(s_pri) n = rsacrypt.decrypt(m) print(n)

输出结果:

-----BEGIN RSA PUBLIC KEY----- MIGJAoGBAIQ5i4cp8arD9zGMWPeJ9NmSk8Xk6OiivWisUNWq1Sh1Shs2LRMbVS89 4VMJMBifJedfbM66eox33MVvM5C9u0/A95QP5FxcUWv2X/rUqs0aTarmx59C/AW5 2fRdSG2YyZPMwOe4/IzK7wLhY8P/kpdwLKk3E6zMDkozFLBy ZhfAgMBAAE= -----END RSA PUBLIC KEY----- -----BEGIN RSA PRIVATE KEY----- MIICYAIBAAKBgQCEOYuHKfGqw/cxjFj3ifTZkpPF5Ojoor1orFDVqtUodUobNi0T G1UvPeFTCTAYnyXnX2zOunqMd9zFbzOQvbtPwPeUD RcXFFr9l/61KrNGk2q5sef QvwFudn0XUhtmMmTzMDnuPyMyu8C4WPD/5KXcCypNxOszA5KMxSwcvmYXwIDAQAB AoGAeMVm4Co7hlI/8o3SpSbo8eGj/9k5s2MRxg2 N6s1zyJycbBmM1F/2QqYSJPX zmVu5YqPg7NoQ 0nRV5v0K8267lyn1Wsw4ysXqQnX0j57VswkSht7bJrYBo8 WH9 xnZmn5qs j46xuN7LZcKLeySPsAg2T3b5HbP Q2dERe5RUECRQDqo /ILrrhgAa4 mbXv6gEPPer3 uCG2cNoRgUUaXox KBJedwn566JoLHFAdp5w5i4OyMwHR973JKR gZdYs5pvtruBmQI9AJBC6ebKaU1fDoqjXz4lxju70btQvqNzo4 xoC4cJ81SS3Qa 6e7hIypk2L1t/F/Ha8KQRW70hN/JNVAUtwJEFaOgzXlhysIf3I5wdPvDtUAkl1IP uuACYW9zsHo5xroDLkOKxjNbqV2kh2KwX2JmhzcM 7bz3FxvN/QXnRqTN5JGoKEC PCeZlqd5zKome9Fmw1BGAkKHbi0jHxGzPqTFN5kwtWRRQNEgSjL ri6G/FATjwGj tlr0S3sHuCnOC8ptxQJFALUAb41pUYJu4Y/MSQMZSXJecW ddB2MNLh/8TNYjshP Xc5DNEw652UKgvJBFlyY49zkvVUyjcnr7aZiOCll9uMgd1Na -----END RSA PRIVATE KEY----- alP05 VPfspedDF/dvNvVbucHTFsX77XUpWIHsRd792zsY4HohlzR1zY0U4qcLgn05r5oZ9XMFnR8RO4IgC3EF4v9zptC TUC9laxKRy0ioSOE8CSHNaYQ/5WmbwH gTJSUtl0AB5nNikKV/qUe0EiZB78doRSdHjitxMaHbLB0= hello-world sysadm4.方法解释

(1).构造函数

Rsacrypt()

(2).genKey(size)

功能:生成公钥和私钥

参数:size - 整数,取值为256|512|1024|2048|4096

(3).getPubKey()

功能:获取实例生成的公钥,返回值类型为字符串

(4).getPriKey()

功能:获取实例生成的私钥,返回值类型为字符串

(5).setPubKey(s_pub)

功能:设置实例的公钥

参数:s_pub - 公钥字符串,类型为字符串类型

(6).setPrikey(s_pri)

功能:设置实例的私钥

参数:s_pri - 私钥字符串,类型为字符串类型

(7).encrypt(text)

功能:对明文进行加密操作

参数:text - 明文,类型为字符串类型

(8).decrypt(text)

功能:对密文进行解密操作

参数:text - 密文,类型为字符串类型



栏目热文

rsa加密解密计算实例(rsa 加密算法数学原理)

rsa加密解密计算实例(rsa 加密算法数学原理)

加密——RSA前端与后台的加密与解密什么是RSA加密RSA加密算法是一种非对称加密算法,所谓非对称,就是指该算法需要一对...

2022-10-30 02:25:24查看全文 >>

刚安装的led大灯左边有黑影怎么调(led大灯透镜中间有黑影怎么调节)

刚安装的led大灯左边有黑影怎么调(led大灯透镜中间有黑影怎么调节)

1.尽管天花板或镜子上方位置的灯具安置即可满足基本照明需求,但可能会产生阴影或眩光,这对剃须或化妆来说并不理想。这时,需...

2022-10-30 02:24:38查看全文 >>

led汽车大灯中间有黑影怎么解决(汽车大灯有彩色光晕是什么原因)

led汽车大灯中间有黑影怎么解决(汽车大灯有彩色光晕是什么原因)

最近在成都力夕车灯改装LED大灯的车主比较多,很多在升级双光透镜之前都换过LED灯泡。疑问比较多的是已经换过LED灯泡直...

2022-10-30 01:53:01查看全文 >>

车灯led有黑影怎么回事(led大灯为什么中间有一条黑影)

车灯led有黑影怎么回事(led大灯为什么中间有一条黑影)

“蜡烛灯-蜡烛灯-蜡烛灯”当你的原厂卤素大灯泛着黄光一路伴随你夜路时,有人欢喜有人愁。现如今已经是科技飞速发展的时代,层...

2022-10-30 01:52:19查看全文 >>

大灯照出的光中间有黑影怎么调(led大灯中间有黑影怎么调节)

大灯照出的光中间有黑影怎么调(led大灯中间有黑影怎么调节)

很多车主可能会遇到这种情况,就是自己的车晚上开灯的时候两个大灯中间会出现黑影,或者是灯光高低不一致。而且有的时候自己没...

2022-10-30 02:11:16查看全文 >>

rsa加密算法图解(rsa加密算法通俗解释)

rsa加密算法图解(rsa加密算法通俗解释)

RSA加密算法是目前最有影响力的公钥加密算法,并且被普遍认为是目前最优秀的公钥方案之一。RSA是第一个能同时用于加密和...

2022-10-30 02:10:02查看全文 >>

rsa加密和解密的公式(rsa算法的加密和解密步骤)

rsa加密和解密的公式(rsa算法的加密和解密步骤)

一、前言在经历了人生的很多至暗时刻后,你读到了这篇文章,你会后悔甚至愤怒:为什么你没有早点写出这篇文章?!你的至暗时刻包...

2022-10-30 01:53:07查看全文 >>

rsa加密步骤(rsa加密方法怎么进行的)

rsa加密步骤(rsa加密方法怎么进行的)

对称加密和非对称加密在说 RSA 之前,我们得先来说说这个什么事对称加密,什么又是非对称加密?对称加密指的就是加密和解密...

2022-10-30 01:49:06查看全文 >>

rsa非对称加密流程(RSA非对称加密)

rsa非对称加密流程(RSA非对称加密)

专注于IT行业优质技术服务号,欢迎关注作者:我叫Vincent密码学是在编码与破译的斗争实践中逐步发展起来的,并随着先进...

2022-10-30 02:04:22查看全文 >>

rsa加密模式(rsa加密过程图)

rsa加密模式(rsa加密过程图)

接口数据使用了 RSA 加密和签名?一篇文章带你搞定!1、前言 很多童鞋在工作中,会遇到一些接口使用RSA加密和签名来...

2022-10-30 02:22:00查看全文 >>

文档排行