要求:
先创建随机字符矩阵,后输入字符串,两两进行按矩阵对角线加密。
思路:
代码如下:
import random
def make():#创建矩阵
x=list()
x1=list()
l=[]
for i in range(32,127):
l.append(chr(i))
random.shuffle(l)#打乱ascii码
yy=0
for i in range(5):
for j in range(19):
x1.append(l[yy])#构建行
yy+=1
if(j==18):
x.append(x1)#用行构建矩阵
x1=[]#行清零
return x
def pprint(x):#输出矩阵
for i in range(5):
for j in range(19):
print(x[i][j],end=' ')
if(j==18):
print("\n")#到头,换行
return 0
def ffind(x,y):#查找字符 x为矩阵,y为需查找字符
ii=0
jj=0
for i in range(5):
for j in range(19):
if(x[i][j]==y):#查找字符
ii=i
jj=j#计数
break
return ii,jj
def jiami(x,y):#加密 x为矩阵,y为需加密字符串
te=""
r1=0
c1=0
r2=0
c2=0
for i in range(0,len(y),2):#成对字符加密
r1,c1=ffind(x,y[i])#找第一位字符位置
if(i+1<len(y)):#判断是否为奇数最后一位
r2,c2=ffind(x,y[i+1])#找第二位字符位置
if(r1==r2):#同行
te+=x[r1][c2]
te+=x[r1][c1]
elif(c1==c2):#同列
te+=x[r2][c1]
te+=x[r1][c1]
else:
te+=x[r2][c1]
te+=x[r1][c2]#交换
else:#奇数最后一位
te+=y[i]
return te#输出加密密文
x=make()
pprint(x)
y=input("输入加密字符串")
yy=jiami(x,y)
print(yy)
运行测试: