gpt4 book ai didi

python - Rail Fence Cipher-寻找更好的解决方案

转载 作者:太空狗 更新时间:2023-10-29 21:29:29 31 4
gpt4 key购买 nike

我用 Python 编写了 Rail Fence Cipher。我想知道是否有更好的解决方案。

对于那些不知道rail fence cipher是什么的人来说,它基本上是一种以螺旋方式创建线性模式的方式编写纯文本的方法。示例 - 当“FOOBARBAZ”使用键 3 进行围栏时。

F . . . A . . . Z . . .
. O . B . R . A . Q . X
. . O . . . B . . . U .

逐行读取上面的螺旋,密文变成“FAZOBRAQXOBU”。阅读更多信息 - Rail fence - Wikipedia .

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

我想知道是否有更好的方法来执行此操作,因为我的程序非常昂贵,它使用了几个词典。

欢迎任何语言的代码。

最佳答案

只是为了它...

def fence(lst, numrails):
fence = [[None] * len(lst) for n in range(numrails)]
rails = range(numrails - 1) + range(numrails - 1, 0, -1)
for n, x in enumerate(lst):
fence[rails[n % len(rails)]][n] = x

if 0: # debug
for rail in fence:
print ''.join('.' if c is None else str(c) for c in rail)

return [c for rail in fence for c in rail if c is not None]

def encode(text, n):
return ''.join(fence(text, n))

def decode(text, n):
rng = range(len(text))
pos = fence(rng, n)
return ''.join(text[pos.index(n)] for n in rng)

z = encode('ATTACK.AT.DAWN', 3)
print z # ACTWTAKA.ANT.D
y = decode(z, 3)
print y # ATTACK.AT.DAWN

关于python - Rail Fence Cipher-寻找更好的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14519227/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com