移位加密

最简单的加密方式之一,通过每一个字母映射至这个字母之后与之相隔一定数量个字母的字母来实现加密。
P = C = K = Z 26 P=C=K=\textbf{Z}_{26} P=C=K=Z26 0 ≤ K ≤ 25 0\le K\le 25 0K25任意 x , y ∈ Z 26 x,y\in \textbf{Z}_{26} x,yZ26定义 e K ( x ) = ( x + K ) m o d    26 e_K(x)=(x+K)\mod 26 eK(x)=(x+K)mod26、定义 d K ( y ) = ( y − K ) m o d    26 d_K(y)=(y-K)\mod 26 dK(y)=(yK)mod26。对任意的 x ∈ Z 26 x\in \textbf{Z}_{26} xZ26 d K ( e K ( x ) ) = x d_K(e_K(x))=x dK(eK(x))=x

代码

python3
输入待加密字符串敲回车即可看到加密和解密结果。待加密字符串不区分大小写。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
START = ord('a')
CHAR_COUNT = 26
OFFSET = 11
MAP = {chr(v+START): chr(((v+OFFSET) % CHAR_COUNT)+START) for v in range(CHAR_COUNT)}
def encrypt(str):  # 加密
    return ''.join([MAP[char] if char in MAP else char for char in str.lower()])
def decrypt(str):  # 解密
    return ''.join([list(MAP.keys())[list(MAP.values()).index(char)] if char in MAP.values() else char for char in str.lower()])
v = input()
print('\033[31m', 'encrypt: ', encrypt(v), '\033[0m', '\033[35m', '\t decrypt: ', decrypt(encrypt(v)), '\033[0m')
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐