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.pswp.cn/news/445542.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445542.shtml
英文地址,請注明出處:http://en.pswp.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;相當…