dnflianfa(dnf连发不好使了wegame)
时间:2022-03-28 07:46:01
小编:janep
阅读:
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-8import rsaimport base64class 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/ws8LiAnmbvi7No2c4FuFU5SY/X+Q3letj1yjEicPF37JAr/KAMRkTctLwIDAQABAkA6LeHPjZY3b+5Ls/ks6Aoh3c9kwg0p1Y1aZcB5ouoM5l8g0wVMJjH7CcpU6wYXO3k/Wh5FF3lOr0jR+c9lakaRAiEAvqpa5WNSp/VDTZ5olS1pl7fJCJCd6m2L0ih8XCSRj1UCIQCdpbjcjD3+hV86M5l1byW99IZoHUlbQWUF6z7dqqCicwIgIiG06+N/5HlPdxGofywF/xbzcgkRe+noYdLFkGkrdZECICcYm1Du4s0FTImFlHBAQU7rno2hfbjI7gHaxnt4vl+rAiBB71GoNejfZGk7vEvinzeB/H03lXdsqm3bgyEc7xkTog==-----END RSA PRIVATE KEY-----''' rsacrypt.setPrikey(s_pri) n = rsacrypt.decrypt(m) print(n)
输出结果:
-----BEGIN RSA PUBLIC KEY-----MIGJAoGBAIQ5i4cp8arD9zGMWPeJ9NmSk8Xk6OiivWisUNWq1Sh1Shs2LRMbVS894VMJMBifJedfbM66eox33MVvM5C9u0/A95QP5FxcUWv2X/rUqs0aTarmx59C/AW52fRdSG2YyZPMwOe4/IzK7wLhY8P/kpdwLKk3E6zMDkozFLBy+ZhfAgMBAAE=-----END RSA PUBLIC KEY----------BEGIN RSA PRIVATE KEY-----MIICYAIBAAKBgQCEOYuHKfGqw/cxjFj3ifTZkpPF5Ojoor1orFDVqtUodUobNi0TG1UvPeFTCTAYnyXnX2zOunqMd9zFbzOQvbtPwPeUD+RcXFFr9l/61KrNGk2q5sefQvwFudn0XUhtmMmTzMDnuPyMyu8C4WPD/5KXcCypNxOszA5KMxSwcvmYXwIDAQABAoGAeMVm4Co7hlI/8o3SpSbo8eGj/9k5s2MRxg2+N6s1zyJycbBmM1F/2QqYSJPXzmVu5YqPg7NoQ+0nRV5v0K8267lyn1Wsw4ysXqQnX0j57VswkSht7bJrYBo8+WH9xnZmn5qs+j46xuN7LZcKLeySPsAg2T3b5HbP+Q2dERe5RUECRQDqo+/ILrrhgAa4mbXv6gEPPer3+uCG2cNoRgUUaXox+KBJedwn566JoLHFAdp5w5i4OyMwHR973JKRgZdYs5pvtruBmQI9AJBC6ebKaU1fDoqjXz4lxju70btQvqNzo4+xoC4cJ81SS3Qa6e7hIypk2L1t/F/Ha8KQRW70hN/JNVAUtwJEFaOgzXlhysIf3I5wdPvDtUAkl1IPuuACYW9zsHo5xroDLkOKxjNbqV2kh2KwX2JmhzcM+7bz3FxvN/QXnRqTN5JGoKECPCeZlqd5zKome9Fmw1BGAkKHbi0jHxGzPqTFN5kwtWRRQNEgSjL+ri6G/FATjwGjtlr0S3sHuCnOC8ptxQJFALUAb41pUYJu4Y/MSQMZSXJecW+ddB2MNLh/8TNYjshPXc5DNEw652UKgvJBFlyY49zkvVUyjcnr7aZiOCll9uMgd1Na-----END RSA PRIVATE KEY-----alP05+VPfspedDF/dvNvVbucHTFsX77XUpWIHsRd792zsY4HohlzR1zY0U4qcLgn05r5oZ9XMFnR8RO4IgC3EF4v9zptC+TUC9laxKRy0ioSOE8CSHNaYQ/5WmbwH+gTJSUtl0AB5nNikKV/qUe0EiZB78doRSdHjitxMaHbLB0=hello-worldsysadm
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 - 密文,类型为字符串类型
本文标签:
- 虚荣国服剑客黑羽进阶玩法技巧:最新详细的攻略简介虚荣国服剑客黑羽进阶怎么玩?在小编看来,进阶玩法难度是比较大的,那么虚荣国服1.11新版剑客黑羽要如何进阶呢?下面,小编就来分享一下虚荣国服1.11新版剑客黑羽进阶攻略。时间:2022-08-11
- 神都夜行录金乌拓印怎么选择 金乌拓印推荐,神都夜行录金乌搭配什么拓印神都夜行录金乌拓印搭配是玩家们想知道事情,搭配好的拓印将提升妖灵战力哦,那么神都夜行录金乌用什么拓印好呢。 【1】御器坊:更进一步提升妖灵的攻击,使其攻击力更上一层楼。时间:2022-08-08
- 梦幻模拟战武士厉害吗 武士属性一览,梦幻模拟战近战弓和武士梦幻模拟战手游中,武士是很强力的刺客3级兵种,有着极高的暴击威力,那么游戏中武士怎么样,适合什么英雄,下面一起来看看吧。 武士 初始属性: 生命40攻击40防御22魔防22 射程2移动3时间:2022-08-08
- 云梦四时歌角色有哪些 四大主角介绍,云梦四时歌人物介绍云梦四时歌今日正式开启安卓测试,手游中有丰富吸引人的游戏剧情和唯美古风的游戏画面,同时有着非常好看的四大主角,一起来看看介绍吧! 四大主角介绍: 心月祈 前尘尽忘情难却, 相时间:2022-08-08
- 狐妖小红娘手游金币怎么得 金币入手途径盘点,狐妖小红娘手游银币交易在狐妖小红娘手游里,金币和玩家的实力挂钩,例如装备的强化、部分物资的获取。那么,金币具体有何作用呢?有哪些获取办法呢?哪些方法获得的金币数量最多呢?一起来了解一番吧。 TOP时间:2022-08-08
![DNF](/d/file/2023/0511/c1d5293683330de0d55c84efb27ed856.png)
DNF
- 类型:角色扮演
- 语言:简体中文
- 大小: 1410MB
- 版本: v0.8.6.4
- 星级:
![WeGame](/d/file/2023/0713/eb846490cfd6dcdbb5b6adfcd30c3e50.png)
WeGame
- 类型:聊天交友
- 语言:简体中文
- 大小: 50.19MB
- 版本: v3.20.2
- 星级:
热门阅读
-
天下第一社区视频www免费看内容丰富可以随意选择,网友:还不限次数!
阅读:1283557
-
老阿姨哔哩哔哩B站肉片入口进出无限制!网友:没骗人,随便进
阅读:810673
-
迈开腿让学长尝尝你的草莓突然上热搜,网友:这水果难道有这么好吃吗
阅读:395775
-
能看美女隐私部位的软件(不收费的隐私软件有哪些)
阅读:231995
-
麻豆精产国品一二三产区区别哇,我从来没见过这样的表演!
阅读:225015