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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- RSA加密演算法的簡單案例加密演算法
- RPC模式的介紹以及簡單的實現RPC模式
- javascript加密簡單介紹JavaScript加密
- python實現之 K-means演算法簡單介紹Python演算法
- RSA演算法簡介演算法
- 分散式鎖簡單入門以及三種實現方式介紹分散式
- 簡單介紹numpy實現RNN原理實現RNN
- Python簡單介紹Python
- 簡單介紹python中的單向連結串列實現Python
- 簡單介紹NMS的實現方法
- 在SQL SERVER中實現RSA加密演算法SQLServer加密演算法
- Blowfish 加密演算法 Java 版簡單實現加密演算法Java
- javascript實現繼承方式簡單介紹JavaScript繼承
- javascript實現鏈式呼叫簡單介紹JavaScript
- RSA演算法與Python實現演算法Python
- 常用加密解密演算法【RSA、AES、DES、MD5】介紹和使用加密解密演算法
- javascript實現二維陣列實現簡單介紹JavaScript陣列
- Xposed簡介以及小米去桌面廣告的簡單實現
- python實現aes加密解密,RSA簽名和驗籤,RSA加密解密,並呼叫介面Python加密解密
- 支付對接常用的加密方式介紹以及java程式碼實現加密Java
- 簡單介紹python process模組Python
- python shutil模組簡單介紹Python
- 實現微信搖一搖功能簡單介紹
- 使用CORS實現ajax跨域簡單介紹CORS跨域
- springmvc使用RSA演算法加密表單SpringMVC演算法加密
- RSA加密演算法加密演算法
- 簡單介紹5個python的實用技巧Python
- 簡單介紹SpringMVC RESTFul實現列表功能SpringMVCREST
- 簡單介紹Go 字串比較的實現示例Go字串
- 實現跨域iframe介面方法呼叫 簡單介紹跨域
- javascript模擬實現私有屬性簡單介紹JavaScript
- jquery實現的元素居中外掛簡單介紹jQuery
- javascript如何實現模組程式設計簡單介紹JavaScript程式設計
- 執行緒池的介紹及簡單實現執行緒
- 簡話密碼學3 - 常用加密演算法介紹密碼學加密演算法
- OpenGL簡單介紹及實踐
- HTML字元實體簡單介紹HTML字元
- LeNet簡介以及Caffe實現