密碼學實驗二

2021-09-12 12:19:58 字數 2421 閱讀 6045

miller-rabin檢測***

miller-rabin檢測是目前應用比較廣泛的一種

二次探測定理:如果p是乙個素數,且0這就是miller-rabin素性測試的方法。不斷地提取指數n-1中的因子2,把n-1表示成d*2^r(其中d是乙個奇數)。那麼我們需要計算的東西就變成了a的d*2^r次方除以n的餘數。於是,a^(d * 2^(r-1))要麼等於1,要麼等於n-1。如果a^(d * 2^(r-1))等於1,定理繼續適用於a^(d * 2^(r-2)),這樣不斷開方開下去,直到對於某個i滿足a^(d * 2^i) mod n = n-1或者最後指數中的2用完了得到的a^d mod n=1或n-1。這樣,fermat小定理加強為如下形式:

盡可能提取因子2,把n-1表示成d*2^r,如果n是乙個素數,那麼或者a^d mod n=1,或者存在某個i使得a^(d*2^i) mod n=n-1 ( 0<=i定理:若n是素數,a是小於n的正整數,則n對以a為基的miller測試,結果為真.

miller測試進行k次,將合數當成素數處理的錯誤概率最多不會超過4^(-k)

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

# miller-rabin素數檢測演算法

import math

def relatively_prime(a,b): # a > b

while b != 0:

temp = b

b = a%b

a = temp

if a==1:

return true

else:

return false

def millerrabin(num):

if num%2 ==0:

return false

flag = true

subsquare = 0

temp = num - 1

while true:

temp = temp / 2

subsquare += 1

if temp % 2 != 0:

break

b= # 存放所求整數(num)的原根

count = 0

for i in range(2,num-1):# g^(p-1) = 1 (mod p)

if relatively_prime(num,i):

count += 1

if count == 5: # 控制檢測次數

break

for i in b:

two = 0

while true:

if (i**temp)**(2**two)%num == 1 or (i**temp)**(2**two)%num == num-1:

flag = true

break

else:

two += 1

if two == subsquare:

flag = false

break

if flag == false:

break # 如果存在一次不滿足條件,則退出迴圈

return flag

num = input(u"請輸入要進行miller-rabin演算法檢測的數:")

if millerrabin(num):

print u"大概率是素數".format(num)

else:

print u"是合數 ".format(num)

原根***(1)假設乙個數g對於p來說是原根,那麼g^i mod p的結果兩兩不同,且有 1簡單來說,g^i mod p ≠ g^j mod p (p為素數)

(2)如果從尤拉函式的角度定義,我們可以先引進乙個概念:

關於階可以看這裡:

此時給原根下定義:

如果 a 與 n 是互質的整數且n>0,那麼當 ordna=φ(n)時,稱aa為模n的原根。 

有個結論:如果g是p的原根,就是g^(p-1) = 1 (mod p)當且僅當指數為p-1的時候成立.(這裡p是素數).

證明**):

首先看一下尤拉定理:

尤拉定理(也稱費馬-尤拉定理或尤拉

因此,在

從2開始列舉,然後暴力判斷g^(p-1) = 1 (mod p)是否當且當指數為p-1的時候成立

而由於原根一般都不大,所以可以暴力得到.

定理:如果模m有原根,那麼他一共有

定理:如果p為素數,那麼素數p一定存在原根,並且模p的原根的個數為

定理:假設m是正整數,a是整數,如果a模m的階等於

模m有原根的充要條件:m=2,4,p^a,2*p^a……. 

求模素數p的原根的方法:對p-1素因子分解,即p-1=(p1^a1)(p2^a2)…..(pk^ak)。,若恒有

密碼學 密碼學基礎

密碼學是研究編制密碼和破譯密碼的技術科學。密碼學的安全目標至少包含三個方面 保密性 完整性 可用性。完整性 資源只有授權方以授權的方式進行修改,所有資源沒有授權則不能修改。可用性 資源只有在適當的時候被授權方訪問,並按需求使用。密碼系統由5部分組成 1 明文空間m 全體明文的集合 2 密文空間c 全...

實驗吧 密碼學trivial

原題 usr bin env python import sys alphal abcdefghijklnmopqrstuvqxyz alphau abcdefghijklmnopqrstuvqxyz num 0123456789 keychars num alphal alphau if len ...

實驗吧 密碼學 變異凱撒

afz r9vyfscoeo ul rwuc 既然是凱撒,本質還是移位密碼,但是要注意區別,看到比傳統的凱撒增加了字元和數字,但是問題在於加了那些符號字元。為了避免這個問題,我們可以直接算移位個數,a f 移位5,f l移位6,z a移位7 似乎又與ascii表對應。比較簡單的指令碼就是把他們都移位...