我正在尝试找出如何在给定明文大写字符串和任意长度的数字 key 的情况下在 Python 中加密柱状转置密码。例如,如果键是 3124 并且字符串是 'IHAVETWOCATS',它会像这样组织字符串:
3124
IHAV
ETWO
CATS
然后先返回第1列的字符,再返回第2列的字符,以此类推,直到最后返回加密后的字符串'HTAAWTIECVOS'
。到目前为止,我知道我需要使用累加器,而且我一直在考虑使用字典的想法,但我完全被困住了。这些是我尝试过的一些功能:
def columnar(plaintext,key):
cipher=''
acc=0
for i in range(len(key)):
while acc<(len(plaintext)/len(key)):
cipher=cipher+plaintext[i+acc*5]
acc=acc+1
return(cipher)
^这只会返回几个字母,而不是适当长度的字符串。
def columnar(明文,键)
值={}
序列表=[]
下一个值=1
指数=随机数(len(键))
对于明文字母:
对于索引中的 i:
如果字母==键[i]:
值[i]=下一个值
下一个值=下一个值+1
对于索引中的 i:
seqlist.append(值[i])
返回序列表
^以上函数返回KeyError: 0 错误。 非常感谢您的帮助!
最佳答案
def encode(txt,key):
sz = len(key) # how big are the columns
cols = list(map("".join,zip(*zip(*[iter(txt)]*sz)))) # list partitioned into columns
return "".join([cols[key.index(str(c))] for c in range(1,sz+1)])
encoded = encode("IHAVETWOCATS","3124")
print encoded
大概是这样吧
关于python - 加密柱状转置密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24872411/