1. 程式人生 > >RSA演算法的簡單實現

RSA演算法的簡單實現

原理

(a):我們取2個很大的質數p,q,n=pq,w=(p1)(q1).

(b):e<p,q,de=N(p1)(q1)+1,

(c):C,x=Cemodn,xdmodn=cdemodn

(d):,cp1modp=1,cq1modq=1,cwmodn=1=cde1modn=1

(e):cdemodn=c(n,e),(n,d),,

(f):回到(b),我們怎麼求出來d?這裡需要用到輾轉相除法的變形來計算逆元
,具體演算法請查閱資料。

演算法的簡單實現:裡面主要有一個輾轉相除法的變形和快速求餘的演算法。

def rev_gcd(a,b):#計算逆元
    an,N = [],a
    while 1:
        divisior = a//b
        a,b = b,a%b
        if b==0:break
        an.append(divisior)
    b1,b2 = 1,0
    for ai in an[::-1]:b1,b2 = b1*ai+b2,b1
    if len(an)%2 ==0:return b1
    else:return
N-b1 def create(p,q): n = p*q e = (p>>1)+(q>>1) x = (p-1)*(q-1) d = rev_gcd(x,e) return n,d,e def rsa_endecode(c,e,n):#快速求餘演算法 u = 1; while e: if e&1:u = (u*c)%n c = (c**2)%n e >>=1 return u n,d,e = create(104729,15485863
) c = rsa_endecode(310,e,n) print(c,rsa_endecode(c,d,n))

相關推薦

密碼學03--go語言與非對稱加密RSA演算法實現

目錄 1.對稱加密的弊端 2.非對稱加密 2.1 非對稱加密使用場景 2.2 區分公私鑰 2.3 非對稱加密通訊流程 2.4 非對稱加密與對稱加密 3.非對稱加密RSA演算法 3.1 RSA演算法 3.2 RSA原理 3.3 RSA生成金鑰對流程

深度學習入門—BP演算法簡單實現

""" BP演算法的簡單實現,這裡只有三層網路,目的在於說明其執行過程 除錯時可以控制輸入的迭代次數和學習率,這樣可以動態地看執行效果 當迭代次數過大時,會出現過擬合情況,親測 """ import numpy as np def sigmoid(x): #設

程序排程模擬程式設計-----FCFS演算法簡單實現

題目描述: 一.實驗目的和要求 加深對程序概念和程序排程過程/演算法的理解。本實驗要求用高階語言編寫和除錯一個模擬動態優先權的程序排程演算法程式。 二、實驗內容 1.給出程序排程的演算法描述(如基於動態優先順序和時間片輪轉排程演算法的描述)。 2.用C語言設計一個對n個併發

計算機作業系統排程演算法——短作業優先演算法簡單實現

//排程演算法的模擬 //1.SJF 短作業優先演算法 #include<stdio.h> #include <malloc.h> #include <string> #include <string.h> #include

協同過濾演算法簡單實現

以下的程式碼主要是來自《推薦系統實踐》第二章節,修改了一些書上的錯誤,簡單的實現了基於使用者的協同過濾演算法和基於物品的協同過濾演算法,可供參考:  import math import random from collections import defaultdict from o

NLP——Kmeans聚類演算法簡單實現

本例中主要是對二維點進行距離計算,開始得時候選取兩個心,最終聚為兩簇。 結束條件的判斷有很多種,這裡採用的是最簡單的:當兩個心不再變化了,則停止聚類。 內部距離和可以不需要計算,這裡輸出來做結果評估用。 public class Km_w2 { //初始

Dijkstra演算法簡單實現(C++)

圖的最短路徑問題主要包括三種演算法: (1)Dijkstra (沒有負權邊的單源最短路徑) (2)Floyed (多源最短路徑) (3)Bellman (含有負權邊的單源最短路徑) 本文主要講使用C++實現簡單的Dijkstra演算法 Dijkstra演算法簡單實現(C++) 1 #in

基於私鑰加密公鑰解密的RSA演算法C#實現

{                                 if (len >=128)                                         blockLen =128;                                 else            

Android HMAC_SHA1 演算法簡單實現

想簽名以下資訊: PUT /quotes/nelson HTTP/1.0 Content-Md5: c8fdb181845a4ca6b8fec737b3581d76 Content-Type:

RSA演算法實現

序言 RSA中的金鑰長度指的是公鑰的長度,目前主流的公鑰長度為1024、2048以及4096位。由於已經有768位公鑰被成功分解的先例,所以低於1024位的公鑰都被認為是不安全的。而C++自帶的基本型別遠遠無法滿足RSA的運算需求,所以RSA演算法的實現必須依賴於高精度

RSA加密演算法java簡單實現

有問題請掃描下圖 簡單完整的程式碼,通過這個程式碼你將對RSA加密演算法在Java中的實現方法有一個初步的瞭解,這個類,你可以直接使用,水平高的,就自己修改完善下程式碼。 package security; import java.security.*; import j

RSA演算法簡單實現

原理 (a):我們取2個很大的質數p,q,記n=pq,w=(p−1)(q−1). (b):取e<p,q,若de=N∗(p−1)∗(q−1)+1,則我們可以進行如下操作 (c):對

RSA 在C#裏簡單實現

hide 通過 簡單 main count cat none alice 個數   假設Alice想要通過一個不可靠的網絡接收Bob的一條私人訊息。她可以用以下的方式來產生一個公鑰和一個私鑰:1.隨意選擇兩個大的質數p和q,p不等於q,計算n=pq。2.根據歐拉函數,求

數獨問題的一種簡單演算法程式碼實現

五一期間無聊時想起去年考研複試有一道上機題目當時沒作出來,於是一時興起想重新拾起看看是當時太緊張,還是自己能力不足。然後發現這道題目還真稍微有些難度,相當於一道數獨問題(sudoku)的簡化版。自己想來想去也只能想到兩種演算法,一種是拿剩餘元素做全排列測試,一種是回溯法測試。最後只實現了一個全排

雙向連結串列簡單實現--資料結構與演算法紀錄片第一記

  從這個月開始得準備春招的東西,所以打算重新學習資料結構與演算法,以後的部落格就以這個為主。   今天是線性結構中的雙向連結串列。   程式碼實現與測試:   DoubleLinkNode:  package linear.doublelink;/** * @Description: 連結串列節點結

RSA加密演算法簡單分析

         預備知識       1)RSA是第一個比較完善的公開金鑰演算法,它既能用於加密,也能用於數字簽名。RSA以它的三個發明者Ron Rivest,

OneR演算法的Python簡單實現

OneR演算法就是,在已有資料中,根據具有相同特徵值的個體最可能屬於哪個類別進行分類。即取效果最好的那個特徵進行分類。 #-*- coding=utf-8 -*- # import numpy as np from sklearn.datasets import load_iris f

負載均衡演算法---Java簡單實現(2)

上一篇介紹了負載均衡的輪詢,隨機,跟hash演算法,這邊我們一起了解下,加權的輪詢以及加權的隨機。其實理解好了輪詢跟隨機演算法,再加權的話其實是差不多的。 看面通過程式碼來了解: (1)為了不重複建立一個server列表,我們先建立一個共有的server列表,如下: pu

負載均衡演算法---Java的簡單實現(1)

最近,大夥常在談論什麼負載均衡,什麼伺服器的,而自己對於這一塊也是不太理解深入模糊,然後就去看書學習,印證自己的想法。下面是自己的一些總結吧:   比較常用的負載均衡演算法,有下面的這一些: (1)輪詢(其實就是迴圈) (2)隨機 (3)hash (4)加權輪詢

Go語言與RSA演算法 —— RSA案例實現

package main import ( "crypto/rsa" "crypto/rand" "crypto/x509" "encoding/pem" "os" "fmt" "encoding/hex" ) //生成私鑰和公鑰 //bits:私鑰的長度 func RsaGe