非对称加密算法RSA加密传输数据python3源代码实现

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

import rsa# RSA 算法规定:
# 待加密的字节数不能超过密钥的长度值除以 8 再减去 11NBIT = 4096
CAN_ENCODE_LEN = NBIT // 8 - 11
PER_ENCODE_LEN = CAN_ENCODE_LEN - (CAN_ENCODE_LEN % 2)
PER_DECODE_LEN = CAN_ENCODE_LEN + 11PUBKEY_STR = """"""PRIKEY_STR = """"""def gen_pem_file():(public_key, private_key) = rsa.newkeys(NBIT)  # rsa-4096 加密得到公钥和私钥# 将公钥保存到文件with open('public.pem', 'wb') as file_pub:file_pub.write(public_key.save_pkcs1())# 将私钥保存到文件with open('private.pem', 'wb') as file_pri:file_pri.write(private_key.save_pkcs1())if not PUBKEY_STR:# 取出公钥try:with open('public.pem', 'rb') as __file_pub:PUBKEY_STR = __file_pub.read()except FileNotFoundError:gen_pem_file()with open('public.pem', 'rb') as __file_pub:PUBKEY_STR = __file_pub.read()if not PRIKEY_STR:# 取出私钥try:with open('private.pem', 'rb') as __file_pri:PRIKEY_STR = __file_pri.read()except FileNotFoundError:gen_pem_file()with open('public.pem', 'rb') as __file_pub:PUBKEY_STR = __file_pub.read()with open('private.pem', 'rb') as __file_pri:PRIKEY_STR = __file_pri.read()PUBKEY = rsa.PublicKey.load_pkcs1(PUBKEY_STR)
PRIKEY = rsa.PrivateKey.load_pkcs1(PRIKEY_STR)# 加密字符串string
def rsa_str_encode(s):s = s.encode('utf-16')len_s = len(s)res = b''res_len=0while len_s - res_len > PER_ENCODE_LEN:res += rsa.encrypt(s[res_len:res_len+PER_ENCODE_LEN], PUBKEY)  # 使用公钥去加密字符串res_len+=PER_ENCODE_LENprint('RSA加密 %d ... %.2f%%' % (res_len, 100* res_len/len_s))res += rsa.encrypt(s[res_len:], PUBKEY)  # 使用公钥去加密字符串return res# 解密字符串string
def rsa_str_decode(s):len_s = len(s)res = b''res_len=0while len_s - res_len > PER_DECODE_LEN:res += rsa.decrypt(s[res_len:res_len+PER_DECODE_LEN], PRIKEY)  # 用私钥去解密res_len+=PER_DECODE_LENprint('RSA解密 %d ... %.2f%%' % (res_len, 100 * res_len / len_s))res += rsa.decrypt(s[res_len:], PRIKEY)return res.decode('utf-16')# 加密字符串string list
def rsa_strs_encode(s):s = s.encode('utf-16')len_s = len(s)res_len=0while len_s - res_len > PER_ENCODE_LEN:yield rsa.encrypt(s[res_len:res_len+PER_ENCODE_LEN], PUBKEY)  # 使用公钥去加密字符串res_len+=PER_ENCODE_LENyield rsa.encrypt(s[res_len:], PUBKEY)  # 使用公钥去加密字符串# 解密字符串string list
def rsa_strs_decode(ss):for i, line in enumerate(ss):res = rsa.decrypt(line, PRIKEY)try:yield res.decode('utf-16')except UnicodeDecodeError:import tracebackprint(traceback.format_exc())if __name__ == '__main__':en_str = rsa_str_encode('dsde军鳄科!@#¥cvr$#2#@1~~!@!#,.,2p4pfvwdwefv1234678435092430r098ygoiufvre2vdvwdvwfvw,.efkiv3evclkvs你'*12)de_crypt = rsa_str_decode(en_str)  # 用私钥去解密print(de_crypt)en_strs = rsa_strs_encode('dsde军鳄科!@#¥cvr$#2#@1~~!@!#,.,2p4pfvwdwefv1234678435092430r098ygoiufvre2vdvwdvwfvw,.efkiv3evclkvs你' * 122)de_crypts = rsa_strs_decode(en_strs)  # 用私钥去解密# print(''.join(de_crypt))for _ in de_crypts:print(_)

转载于:https://my.oschina.net/readerror/blog/2885260

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276859.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(Microsoft) Visual Studio LightSwitch

在蓝色小铺,听到了前辈 阿源哥哥提到 Visual Studio LightSwitch"号称" 可以快速开发桌面、云端的应用程序。http://www.microsoft.com/visualstudio/en-us/lightswitch (这里也提供下载) 原厂提供的图片: 跟「正…

jsp调用controller方法_RPC调用_服务注册与发现

RPC调用_单体架构_SOA架构系统架构的演变 1 传统的单体架构 1.1 什么是单体架构 一个归档包(例如 war 格式或者 Jar 格式)包含了应用所有功能的应用程序,我们通常称之 为单体应用。也称之为单体应用架构,这是一种比较传统的架构风…

MFC项目实战(1)文件管理器--准备篇

本程序主要实现如下功能: 程序通过左边的树形控件显示本地计算机中目录的结构,右边的列表控件则负责响应树形控件中选择的目录节点并把此节点中的所有项在列表框中显示出来,列表框支持奇偶行颜色设置,选中颜色设置和热点颜色设置&…

使用tab键分割的文章能快速转换成表格。( )_EXCEL的163种使用技巧集锦-42~62

本文主要讲述了EXCEL的163种使用技巧其中20条技巧,待163种使用技巧全部讲述完成后,如有需要,各位看官可在评论中留下邮箱,小编会将整理的WORD版发给大家。42. 快速查找工作簿 你可以利用在工作表中的任何文字进行搜寻,…

android通过代码设置铃声_第六十四回:Android中UI控件之SeekBar

各位看官们,大家好,上一回中咱们说的是Android中UI控件之ProgressBar的例子,这一回咱们的例子是UI控件之SeekBar。闲话休提,言归正转。让我们一起Talk Android吧!看官们,SeekBar通常翻译为拖动条&#xff0…

利旧IBM X3650m2 安装esxi5.1提供云桌面(备忘)

上面左边是我的个人微信,如需进一步沟通,请加微信。 右边是我的公众号“Openstack私有云”,如有兴趣,请关注。公司有一台旧服务器,原来的IBM X3650m2 服务器,2物理CPU,24G内存,8块3…

asp登录页面跳转到注册页面_Java 添加页面跳转按钮到PDF文档

概述当我们在查阅含有大量页面的PDF时,可通过在页面上添加跳转按钮来实现页面转换,以达到节约时间,提高效率的目的。本文将通过Java程序来演示如何给PDF文档添加页面跳转按钮。通常来说跳转可分为两种情况:一是跳转至特殊页面(首页…

确定最佳聚类数matlab代码_详解DBSCAN聚类

使用DBSCAN标识为员工分组照片由Ishan seefromthesky 在 Unsplash拍摄基于密度的噪声应用空间聚类(DBSCAN)是一种无监督的ML聚类算法。无监督的意思是它不使用预先标记的目标来聚类数据点。聚类是指试图将相似的数据点分组到人工确定的组或簇中。它可以替代KMeans和层次聚类等流…

Arrays.asList 使用细节

通常初始化后使用如下,但是报错 UnsupportOperationException.... 根据提示信息,就是调用add()方法时抛出了异常。顺着堆栈信息往上找,提示的是AbstractList类的108行出了异常,这一行所在方法的具体实现如下: //108行 …

python list元素合并_python list 合并连接字符串的方法

python list 合并连接字符串的方法 更新时间:2013年03月09日 22:02:18 作者: python 列表合并字符串,我们一般会用到字符串的join方法来操作。下面通过代码的形式,详细的说下list怎么拼成字符串? 相关文章这篇文章主要…

单片机按键防抖程序_这些单片机按键设计方案,请拿好,不谢!

在单片机系统里,按键是常见的输入设备,在本文中介绍几种按键硬件、软件设计方面的技巧。一般的在按键的设计上,一般有四种方案,创客学院带你零基础学习电子产品设计。一是GPIO口直接检测单个按键,如图1.1所示;二是按键…

Oracle 11G 安装详解

oracle官网下载地址:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html 官网下载需要注册orcale账号,比较繁琐,这里直接放已经下载好的安装包链接 Oracle11G下载链接: https://pan.baidu.com/s/1v6oD4jAt…

kubeadm部署k8s_用 kubeadm 部署生产级 k8s 集群

概述kubeadm 已⽀持集群部署,且在1.13 版本中 GA,⽀持多 master,多 etcd 集群化部署,它也是官⽅最为推荐的部署⽅式,⼀来是由它的 sig 组来推进的,⼆来 kubeadm 在很多⽅⾯确实很好的利⽤了 kubernetes 的许…

统计学习方法概论---分类问题

为什么80%的码农都做不了架构师?>>> 分类问题 转载于:https://my.oschina.net/liyangke/blog/2945185

CENTOS7 Python3.7 PyAudio 安装

2019独角兽企业重金招聘Python工程师标准>>> 出现错误: gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -fPIC -I/usr/local/python371/include/python3.7m -c src/_portaudiomodule.c -o build/temp.linux-aarch64-3.7/src/…

bash for循环_Bash 中的 For 循环

循环是编程语言的基本概念之一。当你想要一遍又一遍地运行一系列命令直到达到某个条件后终止退出时,循环很方便。在诸如 Bash 之类的脚本语言中,循环对于自动执行重复性任务非常有用。在 Bash 脚本中有3个基本的循环结构,for 循环&#xff0c…

linux 信号_Linux的信号和线程

Linux的信号和线程-Tech Talk 让技术发出声音​www.ttalk.im什么是线程线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC)&#xff0…

python 数据结构

一. 深入链表 先来介绍一些链表具备的一些常用方法: append(x) : 把一个元素添加到链表的结尾 extend(L) : 将另外一个链表合并到该链表中 insert(i,x) : 插入一个元素到指定位置的前面 remove(x) : 删除链表中第一个值为x的元素 如果没有这样的元素 则返回错误 pop…

go语言项目优化(经验之谈)

1 Go的应用场景 在斗鱼我们将GO的应用场景分为以下三类,缓存类型数据,实时类型数据,CPU密集型任务。这三类应用场景都有着各自的特点。 ● 缓存类型数据在斗鱼的案例就是我们的首页,列表页,这些页面和接口的特点是不同…