吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3207|回复: 11
收起左侧

[Python 转载] 初学密码学——python实现凯撒密码

[复制链接]
PrimerBlack 发表于 2022-3-18 20:50
最近学习密码学,今天用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代码块进行排版,像这样:

#明文
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[/mw_shl_code]
 楼主| 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代码块进行排版,像这样:

[md]```python

感谢提醒,准备学习一下Markdown
kingbin 发表于 2022-3-19 19:21
卧槽,我们正在学,我写了了两天才写出来,还有几个密码写不出来,有时间的话帮我搞一下,非常感谢
列换位密码的加解密(实现了一半,后续没思路了)
vigenere密码的加解密(实现了,但很麻烦)
vernam密码的加解密
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 08:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表