|  | 
 
| 
本帖最后由 ~风介~ 于 2015-1-12 22:01 编辑
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  
 代码:
 复制代码'''仿射加密:默认密文全为无空格字母\按要求输入密钥'''
def Affine(plaintext,key1,key2):
    list1,list2,list3,list4,list5 = [],[],[],[],[]
    
    for i in plaintext:#把密文中的字母换为字母表中对应位置的数字
        list1.append(letter_list.index(i.upper()))
    for i in list1:    #加密:y = (k1*x + k2)%26
        list2.append(((i * key1) + key2)%26)
    for i in list2:    #把加密后的数字换算为对应位置的字母,输出密文。
        list3.append(letter_list[i])
    print('加密后的密文是:',list3)
   #以上为加密部分以下为解密部分
    for i in list2:    #解密:x = (k1的逆)*(y - k2)%26
       list4.append(((i - key2) * Getinverse(key1,letter_list))%26)
    for i in list4:    #把解密后的数字换算为对应位置的字母,输出明文。
        list5.append(letter_list[i])
    print('解密后的密文是:',list5)
def Getinverse(key1,letter_list):#求key1的逆元
       for j in letter_list:
           if(1 == (key1 * (letter_list.index(j)))%len(letter_list)):
              return letter_list.index(j);
        
    
letter_list="ABCDEFGHIJKLMNOPQRSTUVWXYZ" #字母表
plaintext = 'Wednesday'
print('k1可选:1,3,5,7,9,11,15,17,19,21,,23,25')
key1 = int(input('请输入与26互素的整数k1作为密钥1:'))
key2 = int(input('请输入正整数k2作为密钥2:'))
Affine(plaintext,key1,key2)
截图:
 
   
 
 | 
 |