|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 ~风介~ 于 2015-1-12 22:01 编辑
代码:- '''仿射加密:默认密文全为无空格字母\按要求输入密钥'''
- 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)
复制代码
截图:
|
|