我已经用Python编写了栅栏密码。我想知道是否有更好的解决方案。
对于那些不知道什么是栅栏密码的人来说,它基本上是一种将明文以创建螺旋线性模式的方式进行编写的方法。例如,当使用密钥为3时,“FOOBARBAZ”进行栅栏加密的结果如下:
对于那些不知道什么是栅栏密码的人来说,它基本上是一种将明文以创建螺旋线性模式的方式进行编写的方法。例如,当使用密钥为3时,“FOOBARBAZ”进行栅栏加密的结果如下:
F . . . A . . . Z . . .
. O . B . R . A . Q . X
. . O . . . B . . . U .
将上述螺旋线逐行阅读,密文变为“FAZOBRAQXOBU”。更多信息请参见-栅栏密码 - 维基百科。
def cipher(s, key, graph=False) :
down=True
raw_out=[]
out=''
i=0
for x in range(key) :
raw_out.append({})
for pos in range(len(s)) :
raw_out[i][pos]=s[pos]
if i==key-1 :
down=False
if i==0 :
down=True
if down :
i=i+1
else :
i=i-1
for p in raw_out :
for q in p :
out+=p[q]
if graph :
return raw_out
return out
def decipher(s, key) :
map_list=cipher(s, key, True) #CREATING JUST FOR MAPPING - WHICHth CHARACTER OF THE STRING - IS WHICHth CHARACTER OF THE CIPHER
new={}
out=''
s_counter=0
for x in map_list :
for y in x :
new[y]=s[s_counter]
s_counter+=1
for p in new :
out+=new[p]
return map_list
我在想是否有更好的方法来完成这个任务,因为我的程序非常耗费资源,需要使用多个字典。
欢迎使用任何编程语言编写代码。