python实现符文加、解密

在历史悠久的加密技术中,恺撒密码以其简单却有效的原理闻名。通过固定的字母位移,明文可以被转换成密文,而解密则是逆向操作。这种技术不仅适用于英文字母,还可以扩展到其他语言的字符体系,如日语的平假名或汉语的拼音。本文探讨了恺撒密码的基本原理及其在实际应用中的使用案例,并用python来实现该方法。

工作中经常性会需要对一些信息进行解密,人们普遍使用一些较为简单的加密方式。加密技术不仅令人着迷,还在信息安全领域发挥着重要作用。通过深入理解这些方法,我们能更好地保护数据安全,同时也能理解历史上许多重要文献背后隐藏的秘密。恺撒密码作为加密技术的先驱,不仅启发了现代密码学的发展,也提醒我们保持对数据安全和隐私的关注。

在这篇文章中,我们将探索恺撒密码和相关字符加解密的基本原理及其在现代应用中的价值。通过python分析其加密和解密过程,我们可以更好地理解数据保护的重要性,以及加密技术如何在信息交流和安全中发挥作用。

目录

一、凯撒密码加、解密

1.1 通过位移的python实现

1.2 通过建立映射的python实现

二、函数映射加、解密


一、凯撒密码加、解密

我们首先学习通过凯撒密码进行解密。恺撒密码是一种通过将明文字母表按照固定数目进行位移来加密的方法。此加密技术不仅适用于英文字母,也可以应用于其他字符体系,如日语中的平假名或汉语拼音。

如下图所示我们用小写的英文字母表示明文,用大写英文字母表示密文,并对字母表平移三位字母方式进行加密。此处我们需要对KHOORLDPDSROLFHRIILFHUSOHDVHVKRZPHBRXULGHQWLILFDWLRQGRFXPHQWV 这段密文进行解密,并将解密后的信息写入同目录caesar.txt文件中。

1.1 通过位移的python实现

# 定义一个名为 decrypt 的函数,该函数接收两个参数:ciphertext(密文)和 shift(位移量)
def decrypt(ciphertext, shift):# 初始化一个空字符串 plaintext,用于存储解密后的明文plaintext = ""# 遍历密文中的每个字符for char in ciphertext:# 判断字符是否为大写英文字母if 'A' <= char <= 'Z':# 对大写英文字母进行解密操作,ord(char) 获取字符的 ASCII 码值,ord('A') 是字母 A 的 ASCII 码值# (ord(char) - ord('A') - shift) 计算字符在字母表中的相对位置并减去位移量# % 26 确保结果仍在 26 个英文字母的范围内# chr(...) 将计算后的 ASCII 码值转换回字符decrypted_char = chr((ord(char) - ord('A') - shift) % 26 + ord('A'))# .lower() 将解密后的大写字母转换为小写plaintext += decrypted_char.lower()  # 转换为小写else:# 如果字符不是大写英文字母,则直接添加到 plaintext 字符串中plaintext += charreturn plaintext# 给定的密文
ciphertext = "KHOORLDPDSROLFHRIILFHUSOHDVHVKRZPHBRXULGHQWLILFDWLRQGRFXPHQWV"# 解密密文,假设密文是通过向后平移3位加密的
shift = 3
decrypted_text = decrypt(ciphertext, shift)
print("明文信息为:", decrypted_text)# 将解密后的文本写入文件
file_path = './caesar.txt'with open(file_path, 'w') as file:file.write(decrypted_text)

1.2 通过建立映射的python实现

list_c = {'A':'x','B':'y','C':'z','D':'a','E':'b','F':'c','G':'d','H':'e','I':'f','J':'g','K':'h','L':'i','M':'j','N':'k','O':'l','P':'m','Q':'n','R':'o','S':'p','T':'q','U':'r','V':'s','W':'t','X':'u','Y':'v','Z':'w'}# 给定的密文
ciphertext = "KHOORLDPDSROLFHRIILFHUSOHDVHVKRZPHBRXULGHQWLILFDWLRQGRFXPHQWV"# 解密密文
print("明文信息为:",ciphertext)
plaintext = ""
for char in list(ciphertext):print(list_c[char])plaintext += str(list_c[char])# plaintext += list_c[char]
print("加密信息为:",plaintext)
# 将解密后的文本写入文件
file_path = './caesar.txt'with open(file_path, 'w') as file:
file.write(plaintext)

打印结果:


明文信息为: KHOORLDPDSROLFHRIILFHUSOHDVHVKRZPHBRXULGHQWLILFDWLRQGRFXPHQWV

加密信息为: helloiamapoliceofficerpleaseshowmeyouridentificationdocuments


 

二、函数映射加、解密

这张图片展示了两个加密和解密的字符串,分别使用了不同的字母替换方法。第一个字符串使用了一种特定的字母排列方式来隐藏信息,而第二个字符串则显示了如何通过相同的排列方式来解密。 

使用python实现映射关系

list_c = {'a':'D','b':'K','c':'V','d':'Q','e':'F','f':'I','g':'B','h':'J','i':'W','j':'P','k':'E','l':'S','m':'C','n':'X','o':'H','p':'T','q':'M','r':'Y','s':'A','t':'U','u':'O','v':'L','w':'R','x':'G','y':'Z','z':'N'}# 给定的密文
ciphertext = "this is the police please stay calm"# 解密密文
print("明文信息为:",ciphertext)
plaintext = ""
for char in list(ciphertext):if char == " ":plaintext += char# print(list_c[char])else: plaintext += str(list_c[char])# plaintext += list_c[char]
print("加密信息为:",plaintext)
# 将解密后的文本写入文件
file_path = '/home/qingjiao/数据安全应用/plaintext.txt'with open(file_path, 'w') as file:
file.write(plaintext)

打印结果:


明文信息为: this is the police please stay calm

加密信息为: UJWA WA UJF THSWVF TSFDAF AUDZ VDSC


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/37435.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

医院管理系统带万字文档医院预约挂号管理系统基于spingboot和vue的前后端分离java项目java课程设计java毕业设计

文章目录 仓库管理系统一、项目演示二、项目介绍三、万字项目文档四、部分功能截图五、部分代码展示六、底部获取项目源码带万字文档&#xff08;9.9&#xffe5;带走&#xff09; 仓库管理系统 一、项目演示 医院管理系统 二、项目介绍 基于springbootvue的前后端分离医院管…

跨阻放大器

#创作灵感# 最近涉及到微电流的监测项目&#xff0c;而里面的核心就是跨阻放大器&#xff0c;所以这里做一个简单的介绍&#xff0c;后续等项目完成了&#xff0c;再做一个实例的介绍。 #正文# 跨阻放大器&#xff08;Transimpedance Amplifier, TIA&#xff09;是一种将输入电…

NCBI Virus 帮助文档

What is NCBI Virus?&#xff08;什么是NCBI病毒&#xff09; 主要功能&#xff1a; Compare your sequence to those in the NCBI Virus database using NCBI BLAST algorithm. 使用NCBI BLAST算法将您的序列与NCBI病毒数据库中的序列进行比较。Search, view and download …

威联通 NAS 磁盘扩容 更换大容量磁盘具体操作以以TS-532X为例

第一步 检查磁盘状态 打开存储与快照总管&#xff0c;选左侧磁盘查看磁盘状态&#xff0c;应该是就绪状态。 三块磁盘都是就绪状态。 上面截图是更换过程中的截图 具体操作 然后点击存储/快照 &#xff0c;选管理 选逐一更换磁盘&#xff0c;这里raid组需要注意&#xff0…

【LeetCode】 740. 删除并获得点数

这真是一道好题&#xff01;这道题不仅考察了抽象思维&#xff0c;还考察了分析能力、化繁为简的能力&#xff0c;同时还有对基本功的考察。想顺利地做出这道题还挺不容易&#xff01;我倒在了第一步与第二步&#xff1a;抽象思维和化繁为简。题目的要求稍微复杂一些&#xff0…

数据恢复篇:如何在电脑上恢复已删除和丢失的音乐文件

尽管流媒体网络非常流行&#xff0c;但许多人仍然选择将音乐下载并保存在 PC 本地。这会使文件面临丢失或意外删除的风险。 幸运的是&#xff0c;您可以使用数据恢复软件恢复已删除的音乐和其他文件类型。这篇文章讨论了这些解决方案以及如何使用奇客数据恢复检索丢失的音乐文…

02.Linux下安装FFmpeg

目录 一、下载FFmpeg的编译源码 二、编译源码 三、ffmpeg工具结构解析 1、bin目录 2、include库 3、lib库 四、注意事项 五、可能出现的一些问题 1、某些工具未安装/版本过久 2、缺少pkg-config工具 3、缺少ffmplay FFmpeg 是一个开源的跨平台音视频处理工具集&…

科普文:八大排序算法(JAVA实现)+ 自制动画 (袁厨的算法小屋)

我将我仓库里的排序算法给大家汇总整理了一下&#xff0c;写的非常非常细&#xff0c;还对每个算法制作了动画&#xff0c;一定能够对大家有所帮助&#xff0c;欢迎大家阅读。另外我也对 leetcode 上面可以用排序算法秒杀的算法题进行了总结&#xff0c;会在后面的文章中进行发…

Python自动化运维 系统基础信息模块

1.系统信息的收集 系统信息的收集&#xff0c;对于服务质量的把控&#xff0c;服务的监控等来说是非常重要的组成部分&#xff0c;甚至是核心的基础支撑部分。我们可以通过大量的核心指标数据&#xff0c;结合对应的检测体系&#xff0c;快速的发现异常现象的苗头&#xff0c;进…

Golang | Leetcode Golang题解之第208题实现Trie前缀树

题目&#xff1a; 题解&#xff1a; type Trie struct {children [26]*TrieisEnd bool }func Constructor() Trie {return Trie{} }func (t *Trie) Insert(word string) {node : tfor _, ch : range word {ch - aif node.children[ch] nil {node.children[ch] &Trie{…

mac|tableau public 仪表盘使用

对华东地区的利润进行仪表盘可视化 选择下面的功能表的新建仪表盘,把上面的表1表2放入其中 通过下图操作将两个表联合起来&#xff0c;即上图使用筛选器时下面的表随之改变 将上图设置为筛选器&#xff0c;可以通过点击地区查看数据

MySQL之MHA高可用集群及故障切换

一、MHA概述 MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的mysql高可用环境下故障切换和主从复制的软件。MHA的出现就是为了解决mysql单点故障。Mysql故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障性切换操作。MHA能在故障切换的过程中最大程度…

特征工程的力量

为什么你应该使用逻辑回归来建模非线性决策边界&#xff08;使用 Python 代码&#xff09; 作为一名大数据从业者&#xff0c;复杂的机器学习技术非常具有吸引力。使用一些深度神经网络 (DNN) 获得额外的 1% 准确率&#xff0c;并在此过程中启动 GPU 实例&#xff0c;这让人非常…

了解 ZooKeeper:关键概念和架构

ZooKeeper 是一种分布式协调服务&#xff0c;广泛用于分布式系统中&#xff0c;用于维护配置信息、命名、同步和组服务。它最初由雅虎开发&#xff0c;现在是一个 Apache 项目&#xff0c;已成为许多大型分布式应用程序不可或缺的一部分。本文深入探讨 ZooKeeper 的关键概念和架…

Spark Join优化案例:Join Key 远大于 Payload

在一个案例中&#xff0c;大表 100GB、小表 10GB&#xff0c;它们全都远超广播变量阈值&#xff08;默认 10MB&#xff09;。因为小表的尺寸已经超过 8GB&#xff0c;在大于 8GB 的数据集上创建广播变量&#xff0c;Spark 会直接抛出异常&#xff0c;中断任务执行&#xff0c;所…

python-基础篇-选择-是什么

文章目录 定义一&#xff1a;Python 条件语句跟其他语言基本一致的&#xff0c;都是通过一条或多条语句的执行结果&#xff08; True 或者 False &#xff09;来决定执行的代码块。1、什么是条件语句2、if 语句的基本形式3、if 语句多个判断条件的形式4、if 语句多个条件同时判…

Golang | Leetcode Golang题解之第205题同构字符串

题目&#xff1a; 题解&#xff1a; func isIsomorphic(s, t string) bool {s2t : map[byte]byte{}t2s : map[byte]byte{}for i : range s {x, y : s[i], t[i]if s2t[x] > 0 && s2t[x] ! y || t2s[y] > 0 && t2s[y] ! x {return false}s2t[x] yt2s[y] …

《昇思25天学习打卡营第6天 | 函数式自动微分》

《昇思25天学习打卡营第6天 | 函数式自动微分》 目录 《昇思25天学习打卡营第6天 | 函数式自动微分》函数式自动微分简单的单层线性变换模型函数与计算图微分函数与梯度计算Stop Gradient 函数式自动微分 神经网络的训练主要使用反向传播算法&#xff0c;模型预测值&#xff0…

建站小记:迁移域名DNS到CloudFlare

CloudFlare一直有赛博菩萨之称&#xff0c;据说用它做DNS解析服务又快又好又免费&#xff0c;还能防DDOS攻击&#xff0c;并且可以提供页面访问统计功能。 正好我博客网页打开略卡顿&#xff0c;所以决定将自己的DNS解析迁移到CloudFlare。 1.登录CF控制台&#xff0c;添加自己…

LeetCode-刷题记录-二分法合集(本篇blog会持续更新哦~)

一、二分查找概述 二分查找&#xff08;Binary Search&#xff09;是一种高效的查找算法&#xff0c;适用于有序数组或列表。&#xff08;但其实只要满足二段性&#xff0c;就可以使用二分法&#xff0c;本篇博客后面博主会持续更新一些题&#xff0c;来破除一下人们对“只有有…