赛题介绍

挑战介绍

  • 列置换加密是明文以每行固定字数(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

注意:最终实现效果以完全满足要求为准,而不是仅满足如上样例。


题解

简单的模拟题

  1. 要注意对传入参数类型与长度检查。
  2. 使用ljust方法补全 ,
  3. 最后使用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列置换加密 题解相关推荐

  1. 蓝桥 卷“兔”来袭编程竞赛专场-09凯撒加密 题解

    赛题介绍 挑战介绍 恺撒密码也称恺撒加密.恺撒变换.变换加密,是一种最简单且最广为人知的加密技术.采用的是替换方法对信息中的英文字符循环替换为字母表序列中该字符后面或前面的第 N 个字符.例如当  N ...

  2. 蓝桥 卷“兔”来袭编程竞赛专场-05棋盘加密 题解

    赛题介绍 挑战介绍 棋盘密码是一种坐标加密法.棋盘密码通过将 26 个字母设法变成十位数来达到加密的目的,密钥是一个 5×5 的棋盘,将 26 个英文字母填在棋盘的格子里,其中 i 和 j 在同一个方 ...

  3. 蓝桥 卷“兔”来袭编程竞赛专场-06姜子牙阴书加密 题解

    赛题介绍 挑战介绍 姜子牙阴书密码是将一封完整的书信分割成三份,然后由三个送信者各送一份,收信人收到三份书信后再合并成一封完整的情报.如此,即使某个信使被敌军抓获,敌军也不会获得完整的情报. 但是如果 ...

  4. 蓝桥 卷“兔”来袭编程竞赛专场-07明码加密 题解

    赛题介绍 挑战介绍 清末,电报技术进入中国.上海大北水线电报公司在 1871 年选用了六千八百九十七个汉字,代以四码数字,编写成了中国最早的电报明码本.为了传输的内容可以保密,又设计出了将明码本加密的 ...

  5. 蓝桥 卷“兔”来袭编程竞赛专场-04栅栏加密 题解

    赛题介绍 挑战介绍 栅栏密码是一种简单的移动字符位置的加密方法,规则简单.加密方式是将明文按照一定的字数分成多个组,取每组第一个字连起来得到密文 1,再取每组第二个字连起来得到密文 2,以此类推,最后 ...

  6. 蓝桥 卷“兔”来袭编程竞赛专场-10仿射加密 题解

    赛题介绍 挑战介绍 仿射密码结合了移位密码和乘数密码的特点,是一种替换密码.它是利用加密函数一个字母对一个字母的加密.加密函数是 y=ax+b(mod m) ,且 a,b∈Zm (a.b 的值在 m ...

  7. 蓝桥 卷“兔”来袭编程竞赛专场-02破解曾公亮密码 题解

    赛题介绍 挑战介绍 曾公亮编撰的<武经总要>中记载了一套严谨的军事通信密码,这也是目前发现我国古代战争中最早使用的军用密码表.将战场上可能常用到的情况,用 40 个短语归纳表示,且每个短语 ...

  8. 蓝桥杯scratch_又是福州第一!信息学编程竞赛“蓝桥杯”公布福建省赛榜单

    7月10日,第十一届蓝桥杯省赛成绩公布,福建全省共有400人获奖,其中福州获奖人数占比超50%! 相信大家都还很疑惑,蓝桥杯到是一个什么竞赛呢?孩子参加这个比赛有什么用?今天优优老师就来为大家介绍,由 ...

  9. 【青少年编程竞赛交流】02月份微信图文索引

    02月份微信图文索引 由于"组队学习"这个公众号的功能主要是组织Datawhale社群中的学习者们每个月的组队学习,所以,我另外新建了这个微信公众号"青少年编程竞赛交流& ...

最新文章

  1. 嵌入式python 图形界面_有哪些好的嵌入式操作系统界面库(GUI library)?
  2. 安装linux系统结果,Linux 系统安装[Redhat]
  3. 威胁报告:mDNS 反射式 DDoS 攻击
  4. 高通平台android7.1系统显示旋转180度
  5. 安装卸载功能 [测试思路]
  6. mysql如何查找某字段所在表
  7. 利用vue-resource模拟百度下拉列表
  8. Android短视频中如何实现720P磨皮美颜录制
  9. IO虚拟化——Intel VT-d原理
  10. Parsing XML in J2ME
  11. LeetCode 2196. 根据描述创建二叉树(哈希)
  12. ORACLE存储过程中计算某天所在周的周一和周日的方法
  13. 自锁时间电路plc_PLC对两台三相交流电动机联锁启停控制
  14. Apache模块管理
  15. Unity3d大会的部分总结
  16. Android-通过Java代码来实现属性动画
  17. 说说VNode节点(Vue.js实现) 1
  18. Error accessing PRODUCT_USER_PROFILE?
  19. [Android]OpenGL绘制2D几何图形
  20. HTML当当图书馆作业介绍

热门文章

  1. 自动化的8种定位方式
  2. PHP 判断字符串长度及字符串切割问题
  3. 计算机时间怎么改24小时模式,怎么修改电脑的时间为24小时制啊?
  4. 微信小程序登录注册demo+java服务器(一)
  5. windows服务器无法安装net3.5 提示:无法通过windows功能控制面板自动安装或卸载windows server角色和功能服务器
  6. maven文件彻底修改名字 Java文件修改名字
  7. 猴子选大王(Java)
  8. 软件测试发展前景进阶路线(最全面)
  9. 数据库和缓存双写一致性方案解析
  10. HDU_4125 Moles 线段树