Easy Crypto 专题总结
古典密码:
1.1概念:
古典密码是密码学中的其中一个类型,其大部分加密方式都是利用【置换式密码】或【代换式密码】,有时则是两者的混合。虽然其历史中经常使用,但现代已经很少使用,大部分的已经不再使用了。
1.2古典密码的分类:
古典密码主要分为两大类:
1.2.1 置换式密码
置换:根据一定的规则对原文进行重新排列,像洗牌一样。
1.2.2代换式密码
代换:使用一个一一映射代换表(即只能一对一,不能一对多或者多对一)建立一个替换规则。例如下表:
常见的代换式密码:凯撒密码,维吉尼亚密码等等。
接下来会主要介绍一下这几种常见的古典密码。
1.3常见古典密码介绍:
单表代换密码
1.3.1 凯撒密码(Caeser)
在历史上,由于凯撒曾经使用这种密码与其将军们来联系,所以用凯撒来命名这种密码。
根据图片来了解加密原理。凯撒密码一般适用于26个英文字母。根据偏移量来进行加密。如图所示,当偏移量=3。即是A-D,B-E。
python代码如下:
加密:
string = input("Enter a string\n")
string= str.upper(string)
for x in string:if(x==' '):print(' ',end='')elif(ord(x)-ord('A')+3 >= 26 ):print(chr(ord(x)-26+3), end='')else:print (chr(ord(x)+3), end='')
解密:
string = input('Enter Decode text: ')
string = str.upper(string)for x in string:if(x==' '):print(' ',end='')elif(ord(x)-ord('A')-3<0):print(chr(ord(x)-3+26), end='')else:print(chr(ord(x)-3), end='')
1.3.2 仿射密码
数学公式为:
而在放射密码的求解中需要求解逆元。
python代码如下:
'''
仿射密码
m = 52
字符集为小写和大写字母
'''
import string
def encrypt(k1,k2,message):dic = string.ascii_lettersc = []for i in message:if i.islower():num = ord(i)-ord('a')c.append(dic[(num*k1+k2)%52])elif i.isupper():num = ord(i)-ord('A')+26c.append(dic[(num*k1+k2)%52])else:c.append(i)print(''.join(c))def decrypt(k1,k2,message):for i in range(52):if k1*i%52==1:inv = ibreakdic = string.ascii_lettersm = []for i in message:if i.islower():num = ord(i)-ord('a')m.append(dic[inv*(num-k2)%52])elif i.isupper():num = ord(i)-ord('A')+26m.append(dic[inv*(num-k2)%52])else:m.append(i)print(''.join(m))message = 'gVEXGT iDIT' #待加密或解密的消息
a = 5 # key的范围0~51之间
b = 29 # key的范围0~51之间
# encrypt(a,b,message)
decrypt(a,b,message)
真题:Buuctf 小学生的密码学
在线解密网站:http://www.atoolbox.net/Tool.php?
1.3.3 四方密码
介绍:
四方密码是一种对称式加密法,由法国人Felix Delastelle(1840年–1902年)发明。
这种方法将字母两个一组,然后采用多字母替换密码。 [1]
四方密码用4个5×5的矩阵来加密。每个矩阵都有25个字母(通常会取消Q或将I,J视作同一样,或改进为6×6的矩阵,加入10个数字)。
例子:
选两个密钥,example和keyword。去掉重复的字母。就是example变成exampl。余下的字母顺序存入矩阵即可
加密矩阵放右上和左下。
加密步骤。把字符串按两个字母一组分开
Helloworld
He ll ow or ld
找第一组第一个字母在左上角矩阵的位置:
找第一组第二个字母在右下角矩阵的位置:
先找和一个字母同横的,和第二个字母同直的
第一个字母同直,第二个字母同横的
得到he加密后为FY
如此可得接下来,最后就是
he lp me ob iw an ke no bi
FY GM KY HO BX MF KK KI MD
真题:Buuctf 四面八方
在线解密网站:http://ctf.ssleye.com/four.htm
1.3.4 培根密码
培根密码直接根据表中的字母进行转换。
密文一般只含有a和b字母
真题:攻防世界crypto新手-不仅仅是morse
在线解密网站:https://tool.bugku.com/peigen/
图表
1.3.5 标准银河字母
标准银河字母(Standard Galactic Alphabet)出自游戏《指挥官基恩》系列。是系列中使用的书写系统。这是一个简单的替代暗号,用不同的符号取代拉丁字母。SGA可以在不同的语言中使用,比如在游戏《Minecraft》,《指挥官基恩》中。
对于该类密码,只需要对照图表进行翻译即可:
1.3.6 圣堂武士密码:
圣堂武士密码(Templar Cipher)是共济会的“猪圈密码”的一个变种,一直被共济会圣殿骑士用。
直接根据图片上的直接翻译出字母即可:
1.3.7 猪圈密码:
猪圈密码(亦称朱高密码、共济会暗号、共济会密码或共济会员密码),是一种以格子为基础的简单替代式密码。即使使用符号,也不会影响密码分析,亦可用在其它替代式的方法。
直接图片替换字母即可
真题:Buuctf 萌萌哒的八戒 [MRCTF2020]古典密码知多少
1.3.8 当铺密码:
当铺密码 [1] 就是一种将中文和数字进行转化的密码,算法相当简单:当前汉字有多少笔画出头,就是转化成数字几。例如:
王:该字外面有 6 个出头的位置,所以该汉字对应的数字就是 6;
口:该字外面没有出头的位置,那就是0;
人:该字外面有 3 个出头的位置,所以该汉字对应的数字就是 3;
以此类推 ....
下面是一段由当铺密码组成的字符:
密文:王夫 井工 夫口 由中人 井中 夫夫 由中大
对应:67 84 70 123 82 77 125
1.3.9跳舞的小人
这个密码在《福尔摩斯探案全集》里出现过,当时是利用字频分析破解该密码,具体加密如下图:
1.3.10希尔密码
希尔密码(Hill Cipher)是运用基本矩阵论原理的替换密码,由Lester S. Hill在1929年发明。每个字母当作26进制数字:A=0, B=1, C=2... 一串字母当成n维向量,跟一个n×n的矩阵相乘,再将得出的结果MOD26。
在线解密网站:http://www.atoolbox.net/Tool.php?
python代码如下:
import numpy as np
m = 'YOURPINNOISFOURONETWOSIX' #明文
a = np.matrix([[11,2,19],[5,23,25],[20,7,17]]) #密钥LCTFXZUHR
num_m = []
temp = []
count = 1
for i in m: #将明文分为三个一组temp.append(ord(i)-ord('A'))if count % 3 == 0:num_m.append(temp)temp = []count += 1
mat_m = [np.matrix(i).T for i in num_m] #将明文分组转换为向量形式
mat_c = [a * i % 26 for i in mat_m] #得到密文分组的向量形式
num_c = []
temp = []
for i in mat_c: #将密文向量转换为列表形式,且合并到一个列表temp = i.tolist()for j in range(3):num_c.append(temp[j][0])
c = [chr(i+ord('A')) for i in num_c]
print(''.join(c)) #连接成字符串,输出密文
未待完续。。。
Easy Crypto 专题总结相关推荐
- 记一次院赛CTF的Crypto和Re题(入门)
目录 Crypto easy crypto bAcOn 敌军密报 Re easy re 跳到对的地方 简单的XOR 多密码表替换 Crypto easy crypto 首先,这个可以很容易的看出这是一 ...
- SNARK Design
1. 引言 主要参考Justin Thaler 2022年8月在a16z crypto专题研讨会上的系列讲座: SNARK Design, Part I, with Justin Thaler | a ...
- Rollup项目的SNARK景观
1. 引言 前序博客有: SNARK Design 主要参考Justin Thaler 2022年8月在a16z crypto专题研讨会上的系列讲座: SNARK Design, Part II, w ...
- Cumtctf2021初夏赛
web web签到 根据返回版本信息 PHP/8.1.0-dev,搜索可知是存在后面的版本 验证存在后门 ls cat flag.php 别大E admin/admin弱口令登录,得到flag在fla ...
- 校内CTF比赛WriteUp
Web 签到2 口算小天才 easy php 录取查询 我爱python Crypto easy crypto bAcOn Re easy re 跳到对的地方 简单的xor Pwn easy pwn ...
- CUMT平台的部分题解
前言 最近在上网路安全实验课程的时候,其中一个任务就是完成这里面的题目,我还是记录一下吧,,到时候补充到实验报告里面 basic部分 decode 这个题目下载之后是一个压缩包,但是里面什么东西也没有 ...
- ISCW LAB综合实验
最近学到ISCW的最后几节,看了张sir的LAB视频,因此就依葫芦画瓢,认真学习了这个综合实验,花了两天时间终于完成这个实验了和这份实验日志..命令都是自己打出来的,自己辛苦,方便大众..稍后我会将每 ...
- CUMTCTF2017入门赛-Aegis writeup
Basic 签到题 10 根据题目,百度得知,使用本地hosts文件进行域名解析.(虽然用hosts翻过墙,但并不知道原来是这么一回事) WIN10 hosts目录:C:\Windows\System ...
- 2022年 HSC-1th中CRYPTO的Easy SignIn
2022年 HSC-1th中CRYPTO的Easy SignIn 下载附件,一个 txt 文本: 5445705857464579517A4A48546A4A455231645457464243566 ...
最新文章
- 通过分析 JDK 源代码研究 TreeMap 红黑树算法实现--转
- class没有发布到tomcat_面试官扎心一问:Tomcat 在 SpringBoot 中是如何启动的?
- Oracle11g的安装及配置
- json-lib的字符串自动转换坑
- linux无后缀名程序运行,linux – 如何在Ubuntu上运行无扩展(也许是ELF)文件?
- redis主从复制和哨兵机制
- 有向图的拓扑排序算法JAVA实现
- JAVA基础--toString, equals方法
- 使用Cargo入门rust语言
- 一些网络爱好者常用的网络工具
- 在C#中控制ListBox某一行的字体颜色
- 决策树和CART决策树
- CC26xx(CortexM3) UARTs
- 第七周作业-任务分解
- 怎样使用Excel填充柄的作用与功能
- python随机生成4位验证码并判断是否正确_python生成4位验证码
- xlrd.biffh.XLRDError: Excel xlsx file; not supported 。我也来蹭一下热度~
- JavaSrcip类型转换
- C# 高级开发应用:GPS+北斗 antenna 实现精准定位 C#实现
- 搭搭云 新世代超级应用平台 JNPF快速开发平台框架
热门文章
- 奋斗就是每一天都很难,但一年一年却越来越容易;不奋斗就是每天都很容易,但一天一天却越来越难
- 百万粉丝都在看的Python上手教程----滚雪球学Python
- fail-fast 和 fail-safe 快速学习
- 【MCtalk Live】5大维度拆解在线抓娃娃爆红背后的产品逻辑
- 达州学计算机好的学校有哪些,达州市计算机专业职业学校有哪些
- 钙钛矿型复合氧化物材料/CsPbBr3@NH4Br (CPBr–NB)量子点/ITO/Al2O3/CsPbBr3钙钛矿量子点
- Python安装教程【适用各种3.0版本】
- Scratch Blocks本地环境搭建
- 新的篇章:赚了一元钱
- 对秒杀系统进行性能压测,你需要了解一些秒杀系统相关的知识点