换位加密法是由命名、密钥实现重新排列明文中字母位置的加密法,是一个较为简单的加密方法。其加密过程如下:
- 计算加密明文的字符个数。
- 画一行个数等于密钥的格子。(比如说,密钥是12,各自就是12个)。
- 从左到右开始填充格子,每个格子填一个字符。
- 当你用完格子还有字符剩下时,再加一行格子。
- 把最后一行剩下不用的格子涂成灰色。
- 从最上角开始往下写出字符。当你到达这一行的底部后,移到后边那一列。跳过任何灰色的格子。这就是密文。
案例演示
如下,通过一个案例来演示下如何实现换位加密。
加密信息
加密明文:Common sense is not so common.
密钥:8
加密过程
1、 画一行个数等于密钥的格子
2、从左到右开始填充格子,每个格子填一个字符,当你用完格子还有字符剩下时,再加一行格子。
C | o | m | m | o | n | s | |
e | n | s | e | i | s | ||
n | o | t | s | o | c | ||
o | m | m | o | n | . | [空格] | [空格] |
3、从左到右按列生成新的字符【最后空格跳过】,得到结果:
Cenoonommstmme oo snnio. s s c
实现
如下为python实现换位加密法的源码。
# transpositionEncrypt.py
import pyperclip
def main():
myMessage = 'Common sense is not so common.'
myKey = 8
ciphertext = encryptMessage(myKey,myMessage)
print(ciphertext + '|')
def encryptMessage(key, message):
ciphertext = [''] * key
for col in range(key):
pointer = col
while pointer < len(message):
ciphertext[col] += message[pointer]
pointer += key
return ''.join(ciphertext)
if __name__ == '__main__':
main()