蓝桥 卷“兔”来袭编程竞赛专场-08列置换加密 题解
赛题介绍
挑战介绍
- 列置换加密是明文以每行固定字数(key 的字母种类数,一般情况下 key 会选择字母不重复的单词)一行一行写下,如果最后一行字数小于每行的固定字数,则使用特殊符号补充,这样就形成了一个矩阵。然后依照 key 的字母顺序对矩阵列的位置进行调整,最后再将排列好的列依次读取,得到密文。例如:
- 明文:
welcometolq
- key:
qiao
- 补充字符:
,
- 首先确定 qiao 有 4 个字母,长度为 4。然后按照 26 个英文字母的顺序对 qiao 进行编号,越靠前的字母编号越小,可以得到的编号依次是 4-2-1-3。
- 然后对明文分行。每行 4 (key 的长度)个字母,则可以写成 4 列:
1 | 2 | 3 | 4 |
---|---|---|---|
w | e | l | c |
o | m | e | t |
o | l | q | , |
- 由于最后一行缺一个字母,就使用补充字符填充。
- 最后根据 key 的编号顺序对矩阵的列顺序调整,就有:
4 | 2 | 1 | 3 |
---|---|---|---|
c | e | w | l |
t | m | o | e |
, | l | o | q |
- 然后一列一列地依次读取内容,就得到密文:ct,emlwooleq
- 解密的方式和加密时的顺序相反,通过字母总数和 key 的长度获得列数,其次根据列数将密文一列一列地展开,然后通过 key 的编号顺序调整列位置,最后一行一行读取内容就可以得到明文。
挑战目标
- 补充文件
column_permutation.py
下column_permutation_encryption(text)
函数中的 TODO 部分,使其实现我们需要的功能: - 输入一段文本,使用 key:
qiao
和补充字符:,
(英文逗号)对内容进行列置换加密,并将密文返回。 - 如果输入的文本中没有内容,则返回
None
。
def column_permutation_encryption(text: str) -> str:"""TODO"""encryption_text : str = ''return encryption_text
挑战要求
- 题目需使用 Python3 完成,不能使用标准库和第三方库。
- 函数传入的 text 为字符串类型,可能为空、
None
等值。 - 不得修改文件路径、文件名
column_permutation.py
以及函数名column_permutation_encryption(text)
。 - 请只保留文件
column_permutation.py
及文件中函数,不要添加测试或执行代码,避免检测时出错。 - 线上环境调试代码时,请使用
python3 column_permutation.py
命令调用 Python3。
参考样例
# 样例 1
text = "welcometolq"; encryption_text = "ct,emlwooleq"
# 样例 2
text = "welcometolq "; encryption_text = "ct emlwooleq"
# 样例 3
text = "w"; encryption_text = ",,w,"
# 样例 4
text = None; encryption_text = None
注意:最终实现效果以完全满足要求为准,而不是仅满足如上样例。
题解
简单的模拟题
- 要注意对传入参数类型与长度检查。
- 使用
ljust
方法补全,
号 - 最后使用
join
方法将列表拼接为字符串返回即可。
def column_permutation_encryption(text: str) -> str:"""TODO"""if not isinstance(text, str):return Noneresult = []key_len = 4text_len = len(text)if text_len <= 0:return Nonenon_blank = text.replace(' ','')if len(non_blank) == 0:return Nonecol_index = [3, 1, 0, 2]nums = 0 if text_len % 4 == 0 else len(text) + key_len - len(text) % key_lentext = text.ljust(nums,',')matrix = [text[i:i+key_len] for i in range(0,len(text), key_len)]for col in col_index:for i, _ in enumerate(matrix):result.append(matrix[i][col])encryption_text : str = ''.join(result)return encryption_text
题目来源:蓝桥 列置换加密
蓝桥 卷“兔”来袭编程竞赛专场-08列置换加密 题解相关推荐
- 蓝桥 卷“兔”来袭编程竞赛专场-09凯撒加密 题解
赛题介绍 挑战介绍 恺撒密码也称恺撒加密.恺撒变换.变换加密,是一种最简单且最广为人知的加密技术.采用的是替换方法对信息中的英文字符循环替换为字母表序列中该字符后面或前面的第 N 个字符.例如当 N ...
- 蓝桥 卷“兔”来袭编程竞赛专场-05棋盘加密 题解
赛题介绍 挑战介绍 棋盘密码是一种坐标加密法.棋盘密码通过将 26 个字母设法变成十位数来达到加密的目的,密钥是一个 5×5 的棋盘,将 26 个英文字母填在棋盘的格子里,其中 i 和 j 在同一个方 ...
- 蓝桥 卷“兔”来袭编程竞赛专场-06姜子牙阴书加密 题解
赛题介绍 挑战介绍 姜子牙阴书密码是将一封完整的书信分割成三份,然后由三个送信者各送一份,收信人收到三份书信后再合并成一封完整的情报.如此,即使某个信使被敌军抓获,敌军也不会获得完整的情报. 但是如果 ...
- 蓝桥 卷“兔”来袭编程竞赛专场-07明码加密 题解
赛题介绍 挑战介绍 清末,电报技术进入中国.上海大北水线电报公司在 1871 年选用了六千八百九十七个汉字,代以四码数字,编写成了中国最早的电报明码本.为了传输的内容可以保密,又设计出了将明码本加密的 ...
- 蓝桥 卷“兔”来袭编程竞赛专场-04栅栏加密 题解
赛题介绍 挑战介绍 栅栏密码是一种简单的移动字符位置的加密方法,规则简单.加密方式是将明文按照一定的字数分成多个组,取每组第一个字连起来得到密文 1,再取每组第二个字连起来得到密文 2,以此类推,最后 ...
- 蓝桥 卷“兔”来袭编程竞赛专场-10仿射加密 题解
赛题介绍 挑战介绍 仿射密码结合了移位密码和乘数密码的特点,是一种替换密码.它是利用加密函数一个字母对一个字母的加密.加密函数是 y=ax+b(mod m) ,且 a,b∈Zm (a.b 的值在 m ...
- 蓝桥 卷“兔”来袭编程竞赛专场-02破解曾公亮密码 题解
赛题介绍 挑战介绍 曾公亮编撰的<武经总要>中记载了一套严谨的军事通信密码,这也是目前发现我国古代战争中最早使用的军用密码表.将战场上可能常用到的情况,用 40 个短语归纳表示,且每个短语 ...
- 蓝桥杯scratch_又是福州第一!信息学编程竞赛“蓝桥杯”公布福建省赛榜单
7月10日,第十一届蓝桥杯省赛成绩公布,福建全省共有400人获奖,其中福州获奖人数占比超50%! 相信大家都还很疑惑,蓝桥杯到是一个什么竞赛呢?孩子参加这个比赛有什么用?今天优优老师就来为大家介绍,由 ...
- 【青少年编程竞赛交流】02月份微信图文索引
02月份微信图文索引 由于"组队学习"这个公众号的功能主要是组织Datawhale社群中的学习者们每个月的组队学习,所以,我另外新建了这个微信公众号"青少年编程竞赛交流& ...
最新文章
- 嵌入式python 图形界面_有哪些好的嵌入式操作系统界面库(GUI library)?
- 安装linux系统结果,Linux 系统安装[Redhat]
- 威胁报告:mDNS 反射式 DDoS 攻击
- 高通平台android7.1系统显示旋转180度
- 安装卸载功能 [测试思路]
- mysql如何查找某字段所在表
- 利用vue-resource模拟百度下拉列表
- Android短视频中如何实现720P磨皮美颜录制
- IO虚拟化——Intel VT-d原理
- Parsing XML in J2ME
- LeetCode 2196. 根据描述创建二叉树(哈希)
- ORACLE存储过程中计算某天所在周的周一和周日的方法
- 自锁时间电路plc_PLC对两台三相交流电动机联锁启停控制
- Apache模块管理
- Unity3d大会的部分总结
- Android-通过Java代码来实现属性动画
- 说说VNode节点(Vue.js实现) 1
- Error accessing PRODUCT_USER_PROFILE?
- [Android]OpenGL绘制2D几何图形
- HTML当当图书馆作业介绍