python實現仿射密碼(26個字母 數字0 9)

2021-10-10 14:01:42 字數 2739 閱讀 8532

加密變換:e(x)=ax + b (mod m)

解密變換:d(x)=a-1(x-b) (mod m)

m=36 (其中包括26個字母(a到z)和10個數字(0到9))

ascii碼:

a~z 97~122

0~9 48~57

替換表:01

2345

6789

1011

1213

1415

1617

<-xab

cdef

ghij

klmn

opqr

1819

2021

2223

2425

2627

2829

3031

3233

3435

<-xst

uvwx

yz01

2345

6789

基本思路:

將輸入字元的ascii碼轉換為替換表中對應的序號x,帶入上述加解密變換公式,計算出後的值再轉化為對應的ascii碼,最後輸出結果。

a=

int(

input

("輸入a:"))

b=int

(input

("輸入b:"))

dic =

#dic a的逆元,a與36互素

defencrypt()

: m=

input

("請輸入明文:"

) k=m.lower(

) l=

list

(k) s=l

t=for i in

range

(len

(l)):if

97<=

ord(l[i]

)<=

122:

#如果明文是字母,則執行如下操作

t[i]=(

(ord

(l[i])-

97)*a+b)%36

#計算出密文對應置換表裡的序號if0

<=t[i]

<=25:

s[i]

=chr

(t[i]+97

)#如果序號在0~25,則直接置換為字母

elif

26<=t[i]

<=35:

s[i]

=chr

(t[i]+22

)#如果序號在26~35,則置換為數字

elif

48<=

ord(l[i]

)<=57:

#如果明文是數字,則執行如下操作

t[i]=(

(ord

(l[i])-

48+26)

*a+b)%36

if0<=t[i]

<=25:

s[i]

=chr

(t[i]+97

)#如果序號在0~25,則直接置換為字母

elif

26<=t[i]

<=35:

s[i]

=chr

(t[i]+22

)#如果序號在26~35,則置換為數字

print

("結果為:"+""

.join(s)

)def

decrypt()

: c=

input

("請輸入密文:"

) k=c.lower(

) l=

list

(k) s=l

t=for i in

range

(len

(l)):if

97<=

ord(l[i]

)<=

122:

t[i]

=(dic[a]*(

ord(l[i])-

97)-(dic[a]

*b))%36

if0<=t[i]

<=25:

s[i]

=chr

(t[i]+97

)#如果序號在0~25,則直接置換為字母

elif

26<=t[i]

<=35:

s[i]

=chr

(t[i]+22

)#如果序號在26~35,則置換為數字

elif

26<=

ord(l[i]

)<=57:

t[i]

=(dic[a]*(

ord(l[i])-

48+26)

-(dic[a]

*b)%36)

%36if0

<=t[i]

<=25:

s[i]

=chr

(t[i]+97

)#如果序號在0~25,則直接置換為字母

elif

26<=t[i]

<=35:

s[i]

=chr

(t[i]+22

)#如果序號在26~35,則置換為數字

print

("結果為:"+""

.join(s)

)while

true

: encrypt(

) decrypt(

)

仿射密碼加解密(python實現)

仿射密碼是一種替換密碼。它是利用加密函式乙個字母對乙個字母的加密。加密函式是e x ax b mod m 其中,a和m互質,m是字符集的大小。例如,26即是以26個字母作為編碼,當m是26時,a必須是1,3,5,7,9,11,15,17,19,21,23,25其中之一 解密函式為d x a 1 x ...

770 仿射密碼 暴力列舉

時間限制 1000 ms 記憶體限制 65535 kb 難度 1 描述 仿射密碼是替換密碼的另乙個特例,可以看做是移位密碼和乘數密碼的結合。其加密變換如下 e m k1 m k2 mod q 其中k1,k2為金鑰,且0現已知一經過仿射加密的密文和金鑰,請破譯出它的明文。輸入 輸入包含不超過1000組...

仿射密碼解析與例項

仿射密碼的加密函式是 e x ax b modm 其中 解密函式是 d x a 1 x b modm 其中 a 1 是 a 在 zm群的乘法逆元。下面我們以 e x 5x 8 mod26函式為例子進行介紹,加密字串為affine cipher,這裡我們直接採用字母表26個字母作為編碼系統 其對應的加...