數學之美介紹的 公開金鑰演算法

2021-07-28 00:26:32 字數 1706 閱讀 4667

# -*- coding:utf-8 -*-

__author__ = 'qinwenchao'

"""公開金鑰的原理其實很簡單,我們以給上面的單詞 caesar 加解密來說明它的原理。我們先把它變成一組數,比如它的 ascii ** x=099097101115097114(每三位代表乙個字母)做明碼。現在我們來設計乙個密碼系統,對這個明碼加密。

1,找兩個很大的素數(質數)p 和 q,越大越好,比如 100 位長的, 然後計算它們的乘積 n=p×q,m=(p-1)×(q-1)。

2,找乙個和 m 互素的整數 e,也就是說 m 和 e 除了 1 以外沒有公約數。

3,找乙個整數 d,使得 e×d 除以 m 餘 1,即 e×d mod m = 1。

現在,世界上先進的、最常用的密碼系統就設計好了,其中 e 是公鑰誰都可以用來加密,d 是私鑰用於解密,一定要自己儲存好。乘積 n 是公開的,即使敵人知道了也沒關係。

現在,我們用下面的公式對 x 加密,得到密碼 y。

pow(x,e)modn =y

好了,現在沒有金鑰 d,神仙也無法從 y 中恢復 x。如果知道 d,根據費爾馬小定理,則只要按下面的公式就可以輕而易舉地從 y 中得到 x。

pow(y,d)modn=x

"""p = 421

q = 431

n = p * q

m = (p - 1) * (q - 1)

e = 11

d = 82091

defencode(x):

returnpow(x, e) % n

defdecode(y):

returnpow(y, d) % n

deffindd():

d = -1

forxinrange(1

, 10000000):

if((e * x) % m == 1):

d = x

breakreturnd

if__name__ == '__main__':

word = u"公開金鑰 by qwc"

printword

initial_str = map(ord

, word.encode("utf-8"))

# or initial = list(bytearray(word, "utf-8"))

printinitial_str

encoded_str = list()

xininitial_str]

printencoded_str

decode_str = list()

yinencoded_str]

printdecode_str

www = map(chr

, decode_str)

print"".join(www)

HTTPS中的對稱金鑰加密,公開金鑰加密,數字證書

我們將未加密的內容稱為明文,加密之後的內容稱為密文。簡單來說,要加密一段明文,可以將這段內容輸入到乙個加密函式中,輸出密文。但這種簡單的加密方式存在被人盜取到加密函式從而破解明文的危險,且加密函式一般構成複雜,一旦被盜取更換成本較高。於是人們想出了乙個辦法,在加密函式中再新增乙個引數,這個引數只有通...

公開金鑰對檔案進行加密傳輸的過程

color red 在微軟的window nt的安全性體系結構中,公開金鑰系統主要用於對私有金鑰的加密過程。每個使用者如果想要對資料進行加密,都需要生成一對自己的金鑰對 keypair 金鑰對中的公開金鑰和非對稱加密解密演算法是公開的,但私有金鑰則應該由金鑰的主人妥善保管。使用公開金鑰對檔案進行加密...

根據值 加密後的值 算出key 公開金鑰加密

當代密碼學的核心是 公開金鑰加密 public key cryptography 我們先來聊聊公開金鑰加密的定義,然後介紹一下它的兩大應用,最後簡要介紹一下兩個公開金鑰加密的演算法。本文的目的是梳理清楚學習密碼學的大思路,以便在後續文章中,遇到橢圓曲線,rsa 加密通訊,數字簽名這些術語的時候,起碼...