python - 加密柱状转置密码

标签 python encryption python-3.x multiple-columns transpose

我正在尝试找出如何在给定明文大写字符串和任意长度的数字 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/

相关文章:

python - 将新字典添加到现有字典中作为键的值

phpseclib 2 RSA 解密工作正常,但 phpseclib 3 RSA 解密无法正常工作

docker - docker网络覆盖是否像http通信一样保护websocket通信

java - 在Java中使用解密的三重des(3des)​​,得到“javax.crypto.IllegalBlockSizeException:解密中的最后一个 block 不完整”的错误

python - PyQt5 QLCD数字显示

python - 使用Python授权下载到特定位置

python - 如何从隔离表中 <br> 标签的文本节点中提取文本?

python - python中的最小二乘法

python - 计算两个日期之间的差异,不包括 python 中的周末?

python - 使用 Flag 时出现 ValueError