凯撒密码

2016-07-17  本文已影响121人  michaeljacc

https://www.zhihu.com/question/28324597

凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。由此可见,位数就是凯撒密码加密和解密的密钥。

'VRPHWLPHV L ZDQW WR FKDW ZLWK BRX,EXW L KDYH QR UHDVRQ WR FKDW ZLWK BRX'

def lowercase(s):
    result = ''
    for c in s:
        i = upper.find(c)
        if i == -1:
            # 没找到, 说明不是大写字母, 不做处理
            result += c
        else:
            # 找到, 说明它是大写字母
            result += lower[i]
    return result
def decode(s, shift):
    '''
    :type s: str
    :type shift: int
    :rtype: str
    :param s: 要解密的字符串
    :param shift: 移动的位数
    :return: 解密后的字符串
    '''
    result = ''
    for c in s:
        i = lower.find(c)
        if i == -1:
            result += c
        else:
            # 下面这个运算是为了保证下标不为负数, 反正要对 26 取模(求余数)
            new_index = (i + 26 - shift) % 26
            code = lower[new_index]
            result += code
    return result

s_lower = lowercase(s)
for i in range(26):
    source = decode(s_lower, i)
    print(source)

运行结果有26个,一目了然,藏在里面

知乎链接中的各个答案, 很多大神

上一篇下一篇

猜你喜欢

热点阅读