python仿射密碼

前言

密碼學實驗

算法

加密:E(x)=ax+b(mod 26) # x表示明文
解密:D(x)=(a)’(E(x)-b)(mod 26)
D(x)=a’E(x)-a’b(mod 26) # (a)'表示a的逆元

代碼

import random
import os

a=int(input("輸入a:"))
b=int(input("輸入b:"))
dic = {1: 1, 3: 9, 5: 21, 7: 15, 9: 3, 11: 19, 15: 7, 17: 23, 19: 11, 21: 5, 23: 17, 25: 25}
              //dic[] a的逆元,a與26互素

def Encrypt():
    m=input("請輸入明文:")

    k=m.lower()
    l=list(k)
    s=l

    for i in range(len(l)):
        s[i]=chr(((ord(l[i])-97)*a+b)%26+97)
        
    print("結果爲:"+"".join(s))

def Decrypt():
    c=input("請輸入密文:")

    k=c.lower()
    l=list(k)
    s=l

    for i in range(len(l)):
        s[i]=chr((dic[a]*(ord(l[i])-97)-(dic[a]*b)%26)%26+97)
        #s[i]=chr((dic[a]*((ord(l[i]))-dic[a]*b)%26)%26+97)
    print("結果爲:"+"".join(s))

while true:
    Encrypt()
    Decrypt()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章