python学习实例(7)

#=========================================================
#第8章 信息安全(Information Security)的python程序
#=========================================================#====================
#8.3 措施和技术
#====================#++++++++++++++++++++
#8.3.1 密码学
#++++++++++++++++++++#非对称加密#<程序:把n分解成p*q>
import math
n = 221
m = int(math.ceil(math.sqrt(n)))
flag = 0
for i in range(2,m+1,1):if n % i == 0:print(i,int(n/i))flag = 1break
if flag == 0:print ("Cannot find!")#<程序:RSA加密解密实现>
# All the functions are written by Edwin Sha
def change_number (x, b): #这个函数把一个十进制数x转换成一串二进制数if x < b: L=[x]; return(L)a=x % b; x=x//breturn([a]+change_number(x,b))   #the least one goes first!
def mod (a,x,b): #计算 a^x mod bL=change_number(x,2)#print("x in binary = ",L)r=a % b; final=1for i in L:if i ==1: final= (final*r) % br = (r*r) % breturn(final)
def GCD(x,y): #计算 x与y的最大公约数if x>y: a=x;b=yelse: a=y;b=xif a%b ==0: return(b)return(GCD(a%b,b))
def Extended_Euclid(x,y,Vx,Vy): #return [a, b] s.t. ax + by = GCD(x,y)#by Edwin Shar=x%y; z=x//yif r==0: return(y,Vy)Vx[0]=Vx[0]-z*Vy[0]Vx[1]=Vx[1]-z*Vy[1]        return(Extended_Euclid(y, r, Vy, Vx))
def Mod_inverse(e, n): # return x : e*x mod n = 1  by Edwin ShaVx=[1,0]Vy=[0,1]if e>n:G,X=Extended_Euclid(e,n,Vx,Vy)d=X[0]%n        else:G,X=Extended_Euclid(n,e,Vx,Vy)d=X[1]%nreturn(d)import random
def RSA_key_generation(p,q): #p and q are primes, compute keys e and dphi=(p-1)*(q-1)e=random.randint(3,phi)if e%2==0: e+=1while(GCD(e,phi) !=1):e=random.randint(3,phi)if e%2==0: e+=1d=Mod_inverse(e,phi)if e*d % phi !=1: print("ERROR: e and d are not generated correctly")return (e,d)def RSA_test(p,q):e,d=RSA_key_generation(p,q)n=p*qprint("e, d, n: ", e, d, n)M=int(input("Please enter M (<n): "));while M>=n: M=int(input("Please enter M (< n)"))C=mod(M,e,n)print("Before transmission, original M=",M," is encrypted to Cipher=",C)M1=mod(C,d,n)if M!=M1:print("!!! Error  !!!")print("After transmission, Cipher",C, "is decrypted back to:",M1,"\n\n")
p=19
q=97
RSA_test(p,q) 

 

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

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

相关文章

什么是TTL电平、CMOS电平、RS232电平

工作中遇到一个关于电平选择的问题,居然给忘记RS232电平的定义了,当时无法反应上来,回来之后查找资料才了解两者之间的区别,视乎两年多的时间,之前非常熟悉的一些常识也开始淡忘,这个可不是一个好的现象.:-),还是把关于三种常见的电平的区别copy到这里.做加深记忆的效果之用.. …

RFI滤波器电路

RFI滤波器电路 最实用解决方案是通过使用一个差分低通滤波器在仪表放大器前提供 RF 衰减滤波器。该滤波器需要完成三项工作&#xff1a;尽可能多地从输入端去除 RF能量&#xff0c;保持每个输入端和地之间的 AC 信号平衡&#xff0c;以及在测量带宽内保持足够高的输入阻抗以避免…

使用Ultra Librarian 生成PCB库文件

第一步&#xff1a;找到对应芯片的CAD文件&#xff0c;以OPA350为例&#xff1a; http://www.ti.com/product/opa350 第二步&#xff1a; 下载上图右边连接的 Ultra Librarian.zip &#xff0c; 然后根据提示&#xff0c;安装。 安装好后打开Ultra Librarian&#xff0c;会出现…

借汉诺塔理解栈与递归

我们先说&#xff0c;在一个函数中&#xff0c;调用另一个函数。 首先&#xff0c;要意识到&#xff0c;函数中的代码和平常所写代码一样&#xff0c;也都是要执行完的&#xff0c;只有执行完代码&#xff0c;或者遇到return&#xff0c;才会停止。 那么&#xff0c;我们在函…

简单迷宫问题

迷宫实验是取自心理学的一个古典实验。在该实验中&#xff0c;把一只老鼠从一个无顶大盒子的门放入&#xff0c;在盒子中设置了许多墙&#xff0c;对行进方向形成了多处阻挡。盒子仅有一个出口&#xff0c;在出口处放置一块奶酪&#xff0c;吸引老鼠在迷宫中寻找道路以到达出口…

qt超强绘图控件qwt - 安装及配置

qwt是一个基于LGPL版权协议的开源项目&#xff0c; 可生成各种统计图。它为具有技术专业背景的程序提供GUI组件和一组实用类&#xff0c;其目标是以基于2D方式的窗体部件来显示数据&#xff0c; 数据源以数值&#xff0c;数组或一组浮点数等方式提供&#xff0c; 输出方式可以是…

BFPRT

在一大堆数中求其前k大或前k小的问题&#xff0c;简称TOP-K问题。而目前解决TOP-K问题最有效的算法即是BFPRT算法&#xff0c;其又称为中位数的中位数算法&#xff0c;该算法由Blum、Floyd、Pratt、Rivest、Tarjan提出&#xff0c;最坏时间复杂度为O(n)O(n)。 读者要会快速排序…

180°舵机的使用步骤

一.步骤 1.首先查看舵机的运行参数&#xff0c;包括工作的电压和电流&#xff0c;转1&#xff08;60&#xff09;需要的脉宽是多少。 2.根据舵机提供的参数&#xff0c;算出需要的PWM的周期和脉宽的范围。 3.通过单片机或者其他数字电路产生相应的PWM波&#xff0c;便可以驱…

Qt开源项目

图像处理&#xff1a; Krita digikam inkscape 编辑器&#xff1a; LiteIDE QDevelper KDeveloper Monkey Studio TeXstudio 绘图&#xff1a; ZeGrapher QtiPlot qcustomplot QWT HotShots Inkscape 三维建模&#xff1a; QCAD FreeCAD OpenModelica LibreCAD 音乐&#xff1a…

使用Python作为计算器

数值 1.python支持基本的数学运算符&#xff0c;而且应用python你可以像写数学公式那样简单明了。 eg: >>> 2 2 4 >>> 50 - 5*6 20 >>> (50 - 5*6) / 4 5.0 >>> 8 / 5 # division always returns a floating point number 1.6 2.除法…

java整体打印二叉树

一个调的很好的打印二叉树的代码。 用空格和^v来表示节点之间的关系。 效果是这样&#xff1a; Binary Tree: v7v v6v ^5^ H4H …

前缀树

是一种哈希树的变种。典型应用是用于统计&#xff0c;排序和保存大量的字符串&#xff08;但不仅限于字符串&#xff09;&#xff0c;所以经常被搜索引擎系统用于文本词频统计。它的优点是&#xff1a;利用字符串的公共前缀来减少查询时间&#xff0c;最大限度地减少无谓的字符…

学习4层板设计

今天是第一天尝试设计四层PCB板&#xff0c;以前只画过双层板&#xff0c;所以今天花了好多时间来熟悉多层板的设计方法&#xff0c;现在做一下整理&#xff0c;也方便其他同胞少走弯路~~~我用的软件是Altium Designer 6&#xff08;AD6&#xff09;步骤如下&#xff1a; 1、随…

PCB设计的基本步骤

一.方案的设计 1.与客户沟通&#xff0c;确定电路的功能和相关设计指标&#xff08;如&#xff1a;电源&#xff0c;功耗等&#xff09;。 2.画出项目的硬件功能框图。 3.设计出多种方案&#xff0c;并对多种方案进行对比&#xff0c;最终选出最合适的方案。 4.根据上述所…

堆应用例题三连

一个数据流中&#xff0c;随时可以取得中位数。 题目描述&#xff1a;有一个源源不断地吐出整数的数据流&#xff0c;假设你有足够的空间来保存吐出的数。请设计一个名叫MedianHolder的结构&#xff0c;MedianHolder可以随时取得之前吐出所有树的中位数。 要求&#xff1a; 1…

HistCite 的使用方法

摘要 读文献自然要读精品&#xff0c;在面对一个陌生领域&#xff0c;如何才能以最快速度定位精品文献呢&#xff1f;本文将详细介绍 HistCite 的使用方法&#xff0c;结合 Web of Science 和 Endnote &#xff0c;演示如何在几个小时之内&#xff0c;对某个陌生领域的文献进行…

数组基操三连(2)

转圈打印矩阵 题目&#xff1a; 给定一个整型矩阵matrix&#xff0c;请按照转圈的方式打印它。例如&#xff1a;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,打印结果为&#xff1a;1,2,3,4,5,12,16,15,14,13,9,5,6,7,11,10 要求&#xff1a; 额外空间复杂度为O&#xff08;1&a…

数据结构课上笔记7

介绍栈和队列基本概念和用法。 设输入序列1、2、3、4&#xff0c;则下述序列中&#xff08; &#xff09;不可能是出栈序列。【中科院中国科技大学2005】 A. 1、2、3、4 B. 4、 3、2、1 C. 1、3、4、2 D.&#xff14;、1、2、3 选…

ROC曲线与AUC值

ROC曲线与AUC值 1.概述AUC&#xff08;Area Under roc Curve&#xff09;是一种用来度量分类模型好坏的一个标准。这样的标准其实有很多&#xff0c;例如&#xff1a;大约10年前在machine learning文献中一统天下的标准&#xff1a;分类精度&#xff1b;在信息检索(IR)领域中常…

设置SSH免密码自动登录(使用别名)

每次登录服务器都要写一大串的用户名&#xff08;username服务器地址&#xff09;和登录密码十分的繁琐&#xff0c;所以本文就告诉大家如何通过修改配置文件&#xff0c;达到只需要输入&#xff1a;ssh jack(你起的别名)就可以一键登录到服务器中。 1.创建公钥&#xff08;相当…