当前位置: 首页 > news >正文

[密码学入门]凯撒密码(Caesar Cipher)

密码体质五元组:P,C,K,E,D

P,plaintext,明文空间

C,ciphertext,密文空间

K,key,密钥空间

E,encrypt,加密算法

D,decrypt,解密算法

单表代换

单表:英文26字母的顺序

代换:替换为别的字母并保证解密的唯一性

假如我们让加密方式为所有字母顺序移动3位

import stringstring.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'

密钥 ,b=3

加密算法y=(x+b)mod26

plaintext='flag{Caesar Cipher}'
def encrypt(plaintext,b):ciphertext=''for each in plaintext:if each in string.ascii_lowercase:ciphertext+=string.ascii_lowercase[(string.ascii_lowercase.index(each)+3)%26]else:ciphertext+=eachreturn ciphertextret=encrypt(plaintext,3)
# iodj{Cdhvdu Clskhu}

解密算法为x=(y-b)mod26

ret='iodj{Cdhvdu Clskhu}'
def decrypt(ciphertext,b):plaintext=''for each in ciphertext:if each in string.ascii_lowercase:plaintext+=string.ascii_lowercase[(string.ascii_lowercase.index(each)-3)%26]else:plaintext+=eachreturn plaintextret=decrypt(ret,3)
# flag{Caesar Cipher}

密钥空间26

明文空间,密文空间均为26个英文字母(无法加密其他字符和数字)

如果不使用英文标准表,而是从26字母的全排列(26!)中随机选择一个,敌手单纯爆破这个单表和密钥还是很难的。

不过单表代换密码有一个问题:无法掩盖英文字母的统计学特征(如字母e的出现次数更多)。

假如:e在明文中出现700次,e被加密为s,s在密文中也会出现700次。敌手可以通过分析单个字母,词组,词缀等方法直接跳过秘钥,直接尝试恢复明文。

http://www.lryc.cn/news/165705.html

相关文章:

  • uboot 顶层Makefile-make xxx_deconfig过程说明三
  • c++中的多线程通信
  • IO day7
  • C语言之指针进阶篇(3)
  • SQL7 查找年龄大于24岁的用户信息
  • vite搭建vue3项目
  • Qt中表格属性相关操作,调整表格宽度高度自适应内容等
  • NLP机器翻译全景:从基本原理到技术实战全解析
  • docker四种网络模式
  • C 风格文件输入/输出---无格式输入/输出---(std::fgetc,std::getc,std::fgets)
  • 多线程之间如何进行通信 ?
  • 二叉树顺序存储结构
  • Apache HTTPD 多后缀解析漏洞复现
  • 【深入浅出C#】章节10: 最佳实践和性能优化:内存管理和资源释放
  • 我的创作纪念日——1个普通网安人的漫谈
  • Linux中执行bash脚本报错/bin/bash^M: bad interpreter: No such file or directory
  • 期权交易策略主要有哪些?期权交易策略指南
  • 算法通关村第十四关——解析堆在数组中找第K大的元素的应用
  • 【报错】springboot3启动报错
  • 阿里云服务器配置怎么选择?小白攻略
  • 关于 RK3568的linux系统killed用户应用进程(用户现象为崩溃) 的解决方法
  • EasyPHP-Devserver-17安装和配置mantisBT
  • Python打包教程 PyInstaller和cx_Freeze
  • 用两成数据也能训练出十成功力的模型,Jina Embeddings 这么做
  • SpringCloud Eureka搭建会员中心服务提供方-集群
  • 详解TCP/IP协议第二篇:OSI参考模型详解
  • OpenGL 函数列表
  • 【C语言】每日一题(半月斩)——day1
  • Spring MVC 七 - Locale 本地化
  • 力扣(LeetCode)算法_C++——替换后的最长重复字符