挺拔mxs和挺拔k2(Python3 RSA加密解密封装)
更新时间:2022-10-03 03:15:48Python3 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
sysadm
4.方法解释
(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 - 密文,类型为字符串类型
相关推荐
- 最新资讯
-
- 2022-11-15 世界杯8分之一比赛比分(世界杯小历史,1990世界杯1/8决赛,艰难的胜利,普拉特漂亮一击)
- 2022-11-15 12年奥运会金牌哪个国家最多(世运会最终奖牌榜:中国第十,乌克兰第三,德国力压美国排名榜首)
- 2022-11-15 我对穆帅有种特殊的感情(纵你虐我千百遍,我仍待你如初恋!穆里尼奥:希望曼联早日复兴)
- 2022-11-15 菲律宾韩国街在哪里(韩国 | 九月初的济州岛,时有风,偶有雨)
- 2022-11-15 欧联杯冠军进欧冠什么时候(欧冠赛与欧联杯的区别,你知道多少?)
- 2022-11-15 为什么nba篮球员妻子都爱(为何科比的妻子那么受欢迎呢,十几个人追求?拥有三个魅力原因)
- 2022-11-15 5号篮球和7号篮球图(2022-2023赛季NBA每支球队的城市版球衣)
- 2022-11-15 花式运球有错吗(指责队友犯规,自己花式运球失误?郭艾伦的脾气决定辽篮上限)
- 2022-11-15 我想看霹雳赛车(嘲讽值拉满,魏国黑科技霹雳车,守九宫八卦能打赢满红吴骑)
- 2022-11-15 马内造红牌 破门(马内遭“爆头”仍坚持比赛15分钟并进球,球迷痛批塞内加尔换人不及时)
- 推荐攻略
-
-
乌克兰总统身亡(乌总统泽连斯基解除乌总检察长及国家安全局局长职务)
-
足球比赛每个半场多少分钟(足球比赛每半场几分钟)
-
2021中超今天哪里转播(今晚!中超2场对决,CCTV5 直播申花PK武汉,腾讯体育亚泰vs天津)
-
2022梅西坠机身亡事件结果(足坛变天!巴萨无缘榜首的2年:梅西告别,老马去世,2-8惨案)
-
2021全运会篮球直播赛程辽宁(4月22日央视直播:CBA总决赛;赵心童vs马奎尔,塞尔比vs颜丙涛)
-
中国最强导弹(世界洲际导弹前10排名,中国东风导弹领先美国,第一名堪称导弹王)
-
2021篮球比赛在哪里看(CCTV5直播NBA 辽篮争夺CBA总决赛冠军点 颜丙涛出战斯诺克世锦赛)
-
东航结果不敢公布了(民航局再次回应东航MU5735事故调查!查明原因有多难,多久公布?)
-