【Educoder作业】※ 字符信息——凯撒加密
【Educoder作业】※ 字符信息——凯撒加密
应读者要求,提前写了提前更出来。
整个作业我们主要就围绕ASCIIASCIIASCII码来做事,明确了计算机就是只存010101,连字符都是010101的。
T1 加密一个小写字母
只需要用chrchrchr和ordordord函数实现偏移即可。
########## Begin ##########
def enChar(x, key) :y = ''for i in x :y = y + chr(ord(i) + key)return y
########## End ##########
key = 2 #密钥(也就是偏移量)
for x in 'abcdefghijklmnopqrstuvwxyz': #对于所有小写字母y = enChar(x, key) #求x对应的密文字符print('%s -> %s' % (x, y))
T2 加密一个小写字母(续)
采用取模的方式,让加法固定在aaa到zzz里面即可。这个想法是比较实用的。
firstASCII = ord('a') #首个字符的ASCII码,请在enChar中使用
N = 26 #支持的字符总数,请在enChar中使用
########## Begin ##########
def enChar(x, key) :y = ''for i in x :# iy = y + chr((ord(x) + key - firstASCII) % 26 + firstASCII)return y
########## End ##########
key = 2 #密钥(也就是偏移量)
for x in 'abcdefghijklmnopqrstuvwxyz': #对于所有小写字母y = enChar(x, key) #求x对应的密文字符print('%s -> %s' % (x, y))
T3 加密一段文本
就判断一下每一个字符的ASCIIASCIIASCII在不在我们需要的范围里即可。
firstASCII = ord('a') #首个字符的ASCII码
N = 26 #支持的字符总数def enChar(x, key): #加密字符x,key为密钥xid = ord(x)-firstASCIIyid = (xid+key) % Ny = chr(firstASCII+yid)return y
########## Begin ##########
def Caesar(x, key) :y = ''for i in x :dic = ord(i)if firstASCII <= dic < firstASCII + N :y = y + enChar(i, key)else :y = y + ireturn y
########## End ##########
key = 2 #密钥
text = input() #明文
enText = Caesar(text, key) #加密
print('%s -> %s' % (text, enText))
T4 解密一段文本
所谓解密其实就是加法变减法,在取模定义里减法就是通过不断的加模数来维持答案始终在000到mod−1mod-1mod−1里。
########## Begin ##########
firstASCII = ord('a') #首个字符的ASCII码
N = 26 #支持的字符总数def enChar(x, key):xid = ord(x)-firstASCIIyid = (xid+key) % Ny = chr(firstASCII+yid)return ydef Caesar(text, key):result = ''for x in text:if 'a'<=x<='z':x = enChar(x,key)result = result + xreturn resultkey = 2 #密钥
text = input()
enText = Caesar(text, (26 - key) % 26)
print('%s -> %s' % (text, enText))
########## End ##########
T5 扩展到可视字符
就扩展一下咯,还是只需要改那个ififif、firstASCIIfirstASCIIfirstASCII和NNN即可。
########## Begin ##########
firstASCII = 32 #首个字符的ASCII码
N = 95 #支持的字符总数def enChar(x, key):xid = ord(x)-firstASCIIyid = (xid+key) % Ny = chr(firstASCII+yid)return ydef Caesar(text, key):result = ''for x in text:#if 'a'<=x<='z': #若x是小写英文字母if 32 <= ord(x) <= 126 :x = enChar(x,key)result = result + xreturn resultkey = 2 #密钥
text = input()
enText = Caesar(text, key)
print('%s -> %s' % (text, enText))
########## End ##########
T6 扩展到汉字
讲道理和第五题是没有任何区别的,就是把我们字符的范围和初始扩展一下即可。
########## Begin ##########
firstASCII = 0 #首个字符的编码
N = 65536 #支持的字符总数def enChar(x, key):xid = ord(x)-firstASCIIyid = (xid+key) % Ny = chr(firstASCII+yid)return ydef Caesar(text, key):result = ''for x in text:if firstASCII <= ord(x) < firstASCII + N : #若x是可视字符x = enChar(x,key)result = result + xreturn resultkey = 2 #密钥
text = input()
enText = Caesar(text, key)
print('%s -> %s' % (text, enText))
########## End ##########
【Educoder作业】※ 字符信息——凯撒加密相关推荐
- 字符加密(凯撒加密)
在密码学中,恺撒密码是一种最简单且最广为人知的加密技术.它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文.例如,当偏移量是3的时候,所有的字母A ...
- Python暴力破解凯撒加密的文本
凯撒加密是一种经典加密算法,把文本中的每个英文字母替换为字母表中后面第k个字母.该加密算法的抗攻击能力比较弱,因为密钥(也就是k)的取值范围是固定的,很容易暴力破解.当然,也可以利用英文的统计特性(例 ...
- 蓝桥 卷“兔”来袭编程竞赛专场-09凯撒加密 题解
赛题介绍 挑战介绍 恺撒密码也称恺撒加密.恺撒变换.变换加密,是一种最简单且最广为人知的加密技术.采用的是替换方法对信息中的英文字符循环替换为字母表序列中该字符后面或前面的第 N 个字符.例如当 N ...
- Java加密算法—凯撒加密实现以及暴力破解
目录 1.概念 2.加密实现 3.解密实现 4.频率分析法破解 1.概念 凯撒密码最早由古罗马军事统帅盖乌斯·尤利乌斯·凯撒在军队中用来传递加密信息,故称凯撒密码.这是一种位移加密方式,只对26个字母 ...
- 简单移位密码——凯撒加密、解密算法
简单移位密码--凯撒加密.解密算法 移位密码是简单的替换密码(simple substitution cipher),即将明文的一个字符用相应的一个密文字符替换. 算法描述:设P=C=K=Z26,对k ...
- 凯撒加密的最简单的理解与实现(Java版)
凯撒加密 前言 这是我的第一篇博客希望以后多多关注. 这篇文章起源于我在人工智能导论上的一次摸鱼◔ ‸◔,当时老师一节课都在脱离课本介绍,讲什么网络安全之类的问题,后面还举例子了一些加密方法巴拉巴拉, ...
- 古典密码-凯撒加密和解密
在密码学中,恺撒密码是一种最简单且最广为人知的加密技术. 凯撒密码最早由古罗马军事统帅盖乌斯·尤利乌斯·凯撒在军队中用来传递加密信息,故称凯撒密码.这是一种位移加密方式,只对26个字母进行位移替换加密 ...
- C语言凯撒密码字母向后偏移三位,凯撒加密解密(java字母移位)
1.设计思想:加密就是将字符数据转化为ASC码表中的数字,a-w之间通过加3之后再转化为字符型输出,x-z之间通过转化为ASC码表中的数字后减去23再转化为字符型输出.解密就是将字符数据转化为ASC码 ...
- 趣味Python-初级凯撒加密
凯撒加密 凯撒密码是古罗马凯撒大帝用来对军事情报进行加密的算法,它采用了替换方 法对信息中的每一个英文字符循环替换为字母表序列该字符后面第三个字符, 对应关系如下: 原文:A B C D E F G ...
最新文章
- 【分享送书】NGUI全面实践教程V3.8.2 活动开始了!!
- linux ssh服务端下载文件,Linux SSH服务端配置文件设置
- 借助Redis完成延时任务
- java 优化线程_Java | 多线程调优(下):如何优化多线程上下文切换?
- 【今日CV 计算机视觉论文速览 第106期】Fri, 26 Apr 2019
- 理解 Angular 中的 $digest() 和 $apply()
- 【华为云技术分享】自动网络搜索(NAS)在语义分割上的应用(二)
- ros标准版Action通讯
- [转载] JavaParser 无法解析链式调用的问题
- Python配置opencv并在命令行运行
- android把代码打包成sdk,基于Library去开发android SDK——sdk打包(示例代码)
- ubuntu 14.04 root破解
- linux wa%过高,iostat查看io状况
- June 12th No Matter How
- 软件单元黑盒测试,软件测试教学资源单元3 黑盒测试.doc
- 数模备战——基础知识笔记
- VOSviewer进行中文和英文文献分析
- struts的框架介绍
- Android关机充电打开log,Android关机log
- css多行显示省略号同时将最后一行只显示一半,查看全文效果
热门文章
- sqli——labs初学者通关详
- 安装ubuntu成功后不能重启(nomodeset)躺坑记录acpi int3400:00:Unsupported event
- 第02章 Python语法基础,IPython和Jupyter Notebooks--Python for Data Analysis 2nd
- html+两个元素同一行,HTML在同一行显示两个div
- 如何将两个高度不同的div放在同一行
- 两个div放在同一行
- Qt自定义Combox(类似单选按钮功能)
- QT combox的使用示例(输入后捕捉enter键,以及输入编辑框如何加输入限制(正则表达式))
- 通俗理解word2vector词向量模型
- 收藏:python中抓取网易云中某个歌手歌词作词云