[CTF]栅栏密码学习
[CTF]栅栏密码学习
即把将要传递的信息中的字母交替排成上下两行,再将下面一行字母排在上面一行的后边,从而形成一段密码。栅栏密码是一种置换密码。
例如密文:TEOGSDYUTAENNHLNETAMSHVAED
解密过程:先将密文分为两行
T E O G S D Y U T A E N N
H L N E T A M S H V A E D
再按上下上下的顺序组合成一句话
THE LONGEST DAY MUST HAVE AN END.
加深的
密文为:
PFEE SESN RETM MFHA IRWE OOIG MEEN NRMA ENET SHAS DCNS IIAA IEER BRNK FBLE LODI
去掉空格:PFEESESNRETMMFHAIRWEOOIGMEENNRMAENETSHASDCNSIIAAIEERBRNKFBLELODI
共64个字符,以8个字符为一栏,排列成8*8的方阵(凯撒方阵):
P F E E S E S N
R E T M M F H A
I R W E O O I G
M E E N N R M A
E N E T S H A S
D C N S I I A A
I E E R B R N K
F B L E L O D I
从上向下竖着读:PRIMEDIFFERENCEBETWEENELEMENTSRESMONSIBLEFORHIROSHIMAANDNAGASAKI
插入空格:PRIME DIFFERENCE BETWEEN ELEMENTS RESMONSIBLE FOR HIROSHIMA AND NAGASAKI
经典加密技术实例
经典加密主要采用了两种加密技术:替代技术和置换技术。
(1)替代技术
替代技术是将明文中的每个元素(字母、比特、比特组合或字母组合)映射为另一个元素的技术。明文的元素被其他元素所代替而形成密文。在经典加密技术中使用的元素一般为字母或数字。下面给出经典加密中几种有代表性的替代技术。
1)凯撒密码
凯撒密码是最早使用的替代密码。
定义1 凯撒密码将字母表视为一个循环的表,把明文中的字母用表中该字母后面第3个字母进行替代。凯撤密码的明文字母和密文字母的对应关系如下:
明文字母:a b c d e f g h I j k l m n o p q r s t u v w x y z
密文字母:DEFGHIJKLMNOPQRSTUVWXYZABC
若让每个字母对应一个数值(a=0,b=1,……,z=25),则该算法可以表示为:
。
定义2 将1算法一般化,即密文字母与明文字母的偏移可以是任意值,形成了所谓的移位密码,其算法可以表示为:
k就是加密算法的密钥,可以在1到25之间取值。解密算法可以表示为:
。
由于k的取值范围的限制,凯撒密码的密钥空间很小,难以抵御强行攻击密码分析。攻击者最多尝试25次,就一定能够破译密码。
2)单字母替代密码
为了加大凯撒密码的密钥空间,可以采用单字母替代密码。单字母替代密码是将密文字母的顺序打乱后与图文字母对应。
明文字母:a b c d e f g h I j k l m n o p q r s t u v w x y z
密文字母:OGR F C Y S A L X U B Z Q T W D V E H J M K P N I
此时的密钥空间大小为26!,约为4×1026。即使每微秒试一个密钥,也需要花费约1010年才能穷举所有的密钥。因此,强行攻击法不太适合。
3)Vigenere密码
Vigenere密码利用一个凯撤方阵来修正密文中字母的频率。在明文中不同地方出现的同一字母在密文中一般用不同的字母替代。
凯撒方阵的形式为:
A B C D E F G … Y Z
B C D E F G H … Z A
C D E F G H I … A B
D E F G H I J … B C
…
Z A B C D E F … X Y
加密时,使用一个通信双方所共享的密钥字母串(如:HAPPYTIME),将密钥字母串重复书写在明文字母的上方。对要加密的明文字母找到上方的密钥字母,然后比一下以确定凯撒方阵的某一行〔以该密钥字母开头的行〕。最后利用该行的字母表,使用凯撒密码的加密方法进行替代:
例如:
密钥: H A P P Y T I E H A P P Y T I M
明文: p l e a s e s e n d t h e d a t a
明文中的第一个e用凯撒方阵中的P行(PQRSTU…O)进行加密,因此被T替代;第二个e用方阵中的T行(TUVWX…S)进行加密,因此被X替代。
即使只选择凯撒方阵中的任意m行,Vigenere密码的密钥字的长度将是26m,穷举密钥空间将需要很长时间,例如m=5,密钥空间超过11000000,已经足以阻止手工穷举密钥搜索。在Vigenere密码中,一个字母能够映射成m个可能字母中的一个,这样的密码体制称为多表密码体制,一般情况下对多表密码体制的密码分析比单表困难。
(2)置换技术
置换是在不丢失信息的前提下对明文中的元素进行重新排列。
1)矩形转置密码
将明文写成矩形结构,然后通过控制其输出方向和输出顺序来获得密文。例如,明文please send the data在不同输出顺序下的密文如下图所示。矩形方阵上方的数字和字母串为代表输出顺序的密钥,字母串按字母顺序输出(AEFRT)。
输 出 顺 序
1 2 3 4 5
p 1 e a s
e s e n
d t h e
d a t a
输 入 方 向
输 出 顺 序
3 5 1 4 2
p 1 e a s
e s e n
d t h e
d a t a
输 入 方 向
输 出 顺 序
A F T E R
p 1 e a s
e s e n
d t h e
d a t a
输 入 方 向
密文:ped l destaaehtsnea
密文:estasneaped eahtl d
密文:ped aehtl dsneaesta
图 矩形转置密码加密示意图
2)图形转置密码
一个三角形转置密码的例子如下图所示
e
h a v
h a r r y
o k s d o e s
h o w m a n y b o
输 入 方 向
输出方向
明文:how many books dose harry have
密文:OSYVEBERAYORHNDAASHMKWOOH
图 三角形转置密码加密示意图
http://www.sdpc.edu.cn/jpkc/wlaq/szal/aqslfx/sl7.htm
[CTF]栅栏密码学习的更多相关文章
- [CTF]栅栏密码
[CTF]栅栏密码 --------------------- 作者:adversity` 来源:CSDN 原文:https://blog.csdn.net/qq_40836553/articl ...
- CTF之栅栏密码
栅栏密码是比较常见的加密方式之一,其原理是将一组明文分成N组,将每一组的第一个明文取出按照顺序组成一串密文,并将这段密文附在第一段密文之后,以此类推 例如: 分了两组,即秘钥为2: 明文:THERE ...
- 栅栏密码(The Rail-Fence Cipher)详解
最近训练CTF的时候,发现密码学这块的知识不太系统,所以自己接下来会陆陆续续整理出来 今天学习了栅栏密码,BugkuCTF里面的一道叫做"聪明的小羊"的题就与栅栏密码相关 特点 栅 ...
- 困在栅栏里的恺撒WriteUp(附栅栏密码加密解密脚本)
题目地址:http://www.shiyanbar.com/ctf/1867 这道题目并不难,就是先用栅栏密码解密,然后再用恺撒密码解密就好. 1. 6代表了栅栏密码的栏数(说实话,一开始我也没看出来 ...
- ctf古典密码从0到
本文首发于“合天智汇”公众号 作者:淡灬看夏丶恋雨 古典密码和现代密码的区别: 代换密码 单表代换密码 字符或数学型 凯撒密码 仿射密码 四方密码 培根密码 图表 标准银河字母 圣堂武士密码 猪圈密码 ...
- CTF-Tools 一款CTF古典密码加解密工具
CTF-Tools 一款CTF古典密码加解密工具 工具截图 工具简介 一款CTF编码.解码.加密.解密工具. 支持的编码解码: URL-UTF-8 URL-GB2312 Unicode Escape( ...
- 破解栅栏密码python脚本
今天遇到一个要破解的栅栏密码,写了个通用的脚本 #!/usr/bin/env python # -*- coding: gbk -*- # -*- coding: utf_8 -*- # Author ...
- [CTF]当铺密码
[CTF]当铺密码 --------------------- 作者:adversity` 来源:CSDN 原文:https://blog.csdn.net/qq_40836553/articl ...
- [CTF]培根密码
[CTF]培根密码 --------------------- 作者:adversity` 来源:CSDN 原文:https://blog.csdn.net/qq_40836553/articl ...
随机推荐
- celery 与 flask 实现异步任务调度
Flask 定了2中上下文,来实现机遇线程\协程的,wsgi服务的请求(request.session)和存储(g,current_app )过程,通过栈来完成不同线程和协程的上下文切换,在与cele ...
- 我给Apache顶级项目贡献了点源码。
这是why技术的第 91 篇原创文章 这篇文章其实并没有什么技术性的分享,从我的角度而言,更多是记录和思考. 把我对于源码和之前写的部分文章反哺给我的一些东西,带来的一点点思考分享给大家. 一行源码 ...
- innerHTML,innerText
文本替换 <p id="p1">Hello World!</p><div>神经</div><h3 class="hh ...
- TIOBE 编程语言排行榜
https://www.tiobe.com/tiobe-index/ TIOBE 编程语言排行榜是编程语言流行趋势的一个指标
- 2017-2018 ACM-ICPC Northern Eurasia(A.Archery Tournament)
题目链接:https://vjudge.net/problem/Gym-101630A 题意: n个事件,t=1 代表增加一个圆心为(x,y),半径为 abs(y)的靶子,t=2,代表射击的坐标为(x ...
- 2018ICPC南京Problem G. Pyramid
题意: 询问类似于这样的三角形中:里面正三角形的个数是多少. 思路:打表找了个规律发现就是C4n+3 1 //#include<bits/stdc++.h> 2 #include& ...
- P1579_哥德巴赫猜想(JAVA语言)
题目背景 1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇数都可以表示成3个质数之和.质数是指除了1和本身之外没有其他约数的数,如2和11都是质数,而6不是 ...
- 13、Spring教程之全部(包括所有章节)
Spring 教程 1.Spring概述 简介 Spring : 春天 --->给软件行业带来了春天 2002年,Rod Jahnson首次推出了Spring框架雏形interface21框架. ...
- 创建ortools的Dockerfile
技术背景 基于已有的Docker容器镜像,去创建一个本地的镜像,有两种方法:一种是在之前的博客中提到过的,使用docker commit的方案,也就是先进去基础系统镜像内部完成所需的修改,然后comm ...
- 认识Python解释器和PyCharm编辑器
(1)安装Python解释器 Python官网:https://www.python.org/ 下载对应机器(Windows/Mac)的安装包: 百度网盘地址: 链接:https://pan.baid ...