PrimerBlack 发表于 2022-3-18 20:50

初学密码学——python实现凯撒密码

最近学习密码学,今天用python实现一下凯撒密码加解密凯撒密码是通过密码轮以及包含字母和数字的图表实现的。消息的加密取决于使用的密钥是什么,例如密钥key选择3,则加密的字母往后滑动3位,密文解密则往前滑动3位,根据长度再进行回环。
目前凯撒密码是可以暴力破解的,因为可以逐渐尝试每个密钥,而且网络上有大把软件可以对凯撒密码进行破解。。。
另外,不得不佩服古人的智慧。
代码如下:

#明文
from gettext import translation


message = "www.52pojie.cn"

#加密/解密密钥
key = 3

#设置模式->加密还是解密
mode = "decrypt"

#可供加密的符号
ENCRYPT_WORD = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz123456789 !?."

#存储加密/解密后的密文/明文形式
translation = ""

for encry_word in message:
    if encry_word in ENCRYPT_WORD:
      encry_word_index = ENCRYPT_WORD.find(encry_word)

      #开始执行加密/解密
      if mode == 'encrypt':
            translation_index = encry_word_index + key
      elif mode == 'decrypt':
            translation_index = encry_word_index - key

      #如果长度需要进行回环,则执行以下代码
      if translation_index >= len(ENCRYPT_WORD):
            translation_index = translation_index - len(ENCRYPT_WORD)
      elif translation_index < 0:
            translation_index = translation_index + len(ENCRYPT_WORD)

      translation = translation + ENCRYPT_WORD[translation_index]
    else:
      #添加未加解密的符号
      translation = translation + encry_word

#输出
print(translation)


密钥key=3时
加密后的结果:zzzC85srmlhCfq
zzzC85srmlhCfq解密后的结果:www.52pojie.cn

ouyang9r 发表于 2022-3-18 23:06

本帖最后由 ouyang9r 于 2022-3-18 23:08 编辑

感谢分享,希望可以使用Markdown代码块进行排版,像这样:

```python
#明文
message = "www.52pojie.cn"

#加密/解密密钥
key = 3

#设置模式->加密还是解密
mode = "decrypt"

#可供加密的符号
ENCRYPT_WORD = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz123456789 !?."

#存储加密/解密后的密文/明文形式
translation = ""

for encry_word in message:
                if encry_word in ENCRYPT_WORD:
                                encry_word_index = ENCRYPT_WORD.find(encry_word)

                                #开始执行加密/解密
                                if mode == 'encrypt':
                                                translation_index = encry_word_index + key
                                elif mode == 'decrypt':
                                                translation_index = encry_word_index - key

                                #如果长度需要进行回环,则执行以下代码
                                if translation_index >= len(ENCRYPT_WORD):
                                                translation_index = translation_index - len(ENCRYPT_WORD)
                                elif translation_index < 0:
                                                translation_index = translation_index + len(ENCRYPT_WORD)

                                translation = translation + ENCRYPT_WORD
                else:
                                #添加未加解密的符号
                                translation = translation + encry_word

#输出
print(translation)


#密钥key=3时
#加密后的结果:zzzC85srmlhCfq
#zzzC85srmlhCfq解密后的结果:www.52pojie.cn
```

PrimerBlack 发表于 2022-3-18 20:53

#明文注释下的from...import....不用写,敲回车的时候不小心把模块导进去了....

AIRTIM 发表于 2022-3-18 22:55

牛蛙牛蛙

KevINBy 发表于 2022-3-19 09:23

相当暴力

liujkk 发表于 2022-3-19 09:39

学习一下

lypxynok 发表于 2022-3-19 09:48

学习啦,谢谢楼主

Tauruslsj 发表于 2022-3-19 10:23

密码学好啊!还有很多古典的可以实现

PrimerBlack 发表于 2022-3-19 11:14

ouyang9r 发表于 2022-3-18 23:06
感谢分享,希望可以使用Markdown代码块进行排版,像这样:

```python


感谢提醒,准备学习一下Markdown

kingbin 发表于 2022-3-19 19:21

卧槽,我们正在学,我写了了两天才写出来,还有几个密码写不出来,有时间的话帮我搞一下,非常感谢
列换位密码的加解密(实现了一半,后续没思路了)
vigenere密码的加解密(实现了,但很麻烦)
vernam密码的加解密
页: [1] 2
查看完整版本: 初学密码学——python实现凯撒密码