加密算法学习总结---凯撒密码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jdhellfire/article/details/79674494

凯撒密码

凯撒密码(Caesar cipher)是一种相传尤里乌斯-凯撒曾经使用过的密码。凯撒于公元前100年左右诞生于古罗马,是一位著名的军事统帅。

1.凯撒密码基本原理:

凯撒密码的核心思想就是移位。 将明文的每一个字符 在 密码系统所支持字符序列中向右平移N,映射得到新的字符从而实现加密,而解密则相反向左平移N。加密的Key即为N。如下图所示:

这里写图片描述https://inventwithpython.com/cipherwheel/
古代时候人们加密会用到这样一个密码盘。密码盘内圈固定不动,密码盘外圈可以转动。转动后就可以得到每个字符新的映射值。比如:当N=3时,字符串 “ABC”机密得到的结果是:“DEF”,即“ABC“”在其字符表示空间内右移3位。

2.凯撒密码的实现:

import sys

"""
凯撒密码 Python Demo
"""
LETTERS = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~'


def caesar_encrypt(key, cleartext):
    ciphertxt = ''.join(map(lambda txt: LETTERS[(LETTERS.find(txt) + key) % len(LETTERS)], cleartext))
    return ciphertxt


def caesar_decrypt(key, ciphertext):
    clearttext = ''.join(list(map(lambda txt: LETTERS[abs(LETTERS.find(txt) - key) % len(LETTERS)], ciphertext)))
    return clearttext


if __name__ == '__main__':
    if len(sys.argv) != 1:
        if '-KEY' in sys.argv:
            key = int(sys.argv[sys.argv.index('-KEY') + 1])
        else:
            key = 1

        if '-ENCRYPT' in sys.argv:
            msg = sys.argv[sys.argv.index('-ENCRYPT') + 1]
            caesar_encrypt(key, msg)

        if '-DECRYPT' in sys.argv:
            msg = sys.argv[sys.argv.index('-DECRYPT') + 1]
            caesar_decrypt(key, msg)

代码简单说明:
LETTERS 定义了加解密所能支持的字符序列。加密时使用map给明文字符串中的每一个字符做映射,映射的逻辑即:在字符序列内找到当前字符,并向右移动key位得到新的字符LETTERS[(LETTERS.find(txt) + key) % len(LETTERS)] 这里需要做取模运算时因为移到字符空间结尾时需要从序列开头重新映射。解密即相反的过程不再重复叙述。LETTERS[abs(LETTERS.find(txt) - key) % len(LETTERS)]

猜你喜欢

转载自blog.csdn.net/jdhellfire/article/details/79674494