马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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)
截图:
|