RSA加密演算法簡單介紹以及python實現
#coding=gbk
import math
import random
# 平方乘演算法求餘數 base^n mod mod
def repeatMod(base, n, mod):
a = 1
while n:
if n&1:
a = (a*base)%mod
base = (base*base)%mod
n = n>>1
return a
# 判斷是否為素數( Miller-Rabbin )
def IsPrime(BigNum, RoundTime):
temp = BigNum - 1
k = 0
while (temp & 0x1)==0 and temp:
temp = temp >>1
k = k+1
m = temp
while RoundTime:
a = random.randint(1, BigNum- 2)
b = repeatMod(a, m, BigNum)
if b == 1 or b==BigNum-1:
return True
for i in range(1,k):
b = repeatMod(b, 2, BigNum) # 若 b^2^(k-1) mod n ==+-1, 則是一個素數
if b == 1 or b==BigNum-1:
return True
RoundTime = RoundTime -1
return False
# 生成大素數
def BuildBigPrime():
flag = False
while not flag:
BigNum = random.randint(2**512,2**513)
if BigNum % 2 !=0 :
flag = IsPrime(BigNum, 10)
return BigNum
# 輾轉相除求最大公約數
def MaxCommDivisor(m,n):
if n == 1:
return True
if m % n == 0:
return False
else:
flag = MaxCommDivisor(n, m%n)
return flag
# 求 b mod a b 的逆元
def get_(a, b):
if b == 0:
return 1, 0
else:
k = a // b
x1, y1 = get_(b, a % b)
x, y = y1, (x1 - k * y1)
return x,y
if __name__ == '__main__':
print(" 正在生成大素數 ------")
p = BuildBigPrime()
q = BuildBigPrime()
while p==q:
q = BuildBigPrime()
print("外匯跟單gendan5.com 大素數 p:",p,"\n 大素數 q:",q)
n = p*q
fn = (p-1)*(q-1)
while True:
key1 = random.randint(2**64,2**65)
if MaxCommDivisor(fn, key1):
break
print(" 金鑰 1 為 :",key1)
k, key2 = get_(fn,key1)
# 生成的私鑰 key2 可能為負數,我們需要 mod fn 來保證其為正數
if key2<0:
key2 = key2 % fn
print(" 金鑰 2 為 :",key2)
m = input(" 請輸入明文: ")
m = int(m.encode('utf-8').hex(),16)
print('\n------ 加密中 ----')
c = repeatMod(m,key1,n)
print(" 明文為: ",m,"\n 密文為: ",c)
print('\n------ 解密中 ----')
m = repeatMod(c,key2,n)
print(" 密文為: ",c,"\n 明文為: ",m)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2795402/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python實現之 K-means演算法簡單介紹Python演算法
- RPC模式的介紹以及簡單的實現RPC模式
- Python簡單介紹Python
- 簡單介紹python中的單向連結串列實現Python
- 分散式鎖簡單入門以及三種實現方式介紹分散式
- RSA演算法簡介演算法
- 簡單介紹numpy實現RNN原理實現RNN
- 簡單介紹NMS的實現方法
- RSA演算法與Python實現演算法Python
- 簡單介紹5個python的實用技巧Python
- 支付對接常用的加密方式介紹以及java程式碼實現加密Java
- 簡單介紹python process模組Python
- 簡單介紹SpringMVC RESTFul實現列表功能SpringMVCREST
- LeNet簡介以及Caffe實現
- RSA加密演算法加密演算法
- 簡單介紹Python迷宮生成和迷宮破解演算法Python演算法
- 簡單介紹Go 字串比較的實現示例Go字串
- 簡單介紹VBS 批次Ping的專案實現
- 簡單介紹pytorch中log_softmax的實現PyTorch
- 簡話密碼學3 - 常用加密演算法介紹密碼學加密演算法
- 【SpringMVC】RESTFul簡介以及案例實現SpringMVCREST
- Relief 特徵選擇演算法簡單介紹特徵演算法
- 簡單介紹Android自定義View實現時鐘功能AndroidView
- 簡單介紹python的垃圾回收機制Python
- C#常用8種排序演算法實現以及原理簡介C#排序演算法
- RPC簡單介紹RPC
- KVM簡單介紹
- RMI簡單介紹
- HTML簡單介紹HTML
- HTML 簡單介紹HTML
- JavaScript 簡單介紹JavaScript
- CSS 簡單介紹CSS
- ajax簡單介紹
- SVG簡單介紹SVG
- Clickjacking簡單介紹
- 【Pandas】簡單介紹
- Map簡單介紹
- JSON簡單介紹JSON