[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]栅栏密码学习的更多相关文章

  1. [CTF]栅栏密码

    [CTF]栅栏密码 ---------------------  作者:adversity`  来源:CSDN  原文:https://blog.csdn.net/qq_40836553/articl ...

  2. CTF之栅栏密码

    栅栏密码是比较常见的加密方式之一,其原理是将一组明文分成N组,将每一组的第一个明文取出按照顺序组成一串密文,并将这段密文附在第一段密文之后,以此类推 例如: 分了两组,即秘钥为2: 明文:THERE ...

  3. 栅栏密码(The Rail-Fence Cipher)详解

    最近训练CTF的时候,发现密码学这块的知识不太系统,所以自己接下来会陆陆续续整理出来 今天学习了栅栏密码,BugkuCTF里面的一道叫做"聪明的小羊"的题就与栅栏密码相关 特点 栅 ...

  4. 困在栅栏里的恺撒WriteUp(附栅栏密码加密解密脚本)

    题目地址:http://www.shiyanbar.com/ctf/1867 这道题目并不难,就是先用栅栏密码解密,然后再用恺撒密码解密就好. 1. 6代表了栅栏密码的栏数(说实话,一开始我也没看出来 ...

  5. ctf古典密码从0到

    本文首发于“合天智汇”公众号 作者:淡灬看夏丶恋雨 古典密码和现代密码的区别: 代换密码 单表代换密码 字符或数学型 凯撒密码 仿射密码 四方密码 培根密码 图表 标准银河字母 圣堂武士密码 猪圈密码 ...

  6. CTF-Tools 一款CTF古典密码加解密工具

    CTF-Tools 一款CTF古典密码加解密工具 工具截图 工具简介 一款CTF编码.解码.加密.解密工具. 支持的编码解码: URL-UTF-8 URL-GB2312 Unicode Escape( ...

  7. 破解栅栏密码python脚本

    今天遇到一个要破解的栅栏密码,写了个通用的脚本 #!/usr/bin/env python # -*- coding: gbk -*- # -*- coding: utf_8 -*- # Author ...

  8. [CTF]当铺密码

    [CTF]当铺密码 ---------------------  作者:adversity`  来源:CSDN  原文:https://blog.csdn.net/qq_40836553/articl ...

  9. [CTF]培根密码

    [CTF]培根密码 ---------------------  作者:adversity`  来源:CSDN  原文:https://blog.csdn.net/qq_40836553/articl ...

随机推荐

  1. [实战]ASP.NET Padding Oracle信息泄露漏洞

    前言 这个漏洞是很多年前的了,刚好碰到网站有这个漏洞,利用一下也记录一下.具体原理请搜索学习,反正我不会. 推荐看这里,写得很清楚:http://www.91ri.org/6715.html 工具 p ...

  2. Oracle数据库搬家牵扯出的一些知识点记录

    Oracle数据库迁移过程中的一些记录 工作原因,对开发服务器的数据库进行了迁移,实际执行操作之前查了一下迁移oracle数据库的可行方案,最后用了 exp/imp 进行导出导入(这个比较简单),以及 ...

  3. MyBatis(一):JDBC使用存在的问题

    JDBC使用步骤: a:加载 JDBC 驱动程序 b:创建数据库的连接对象Connection c:根据链接获取Statement d:拼接SQL语句及设置参数 e:执行SQL并获取结果集 f:关闭使 ...

  4. C语言入门--初来乍到

    Hi,我是fish-studio,这是我写的第一篇博客,接下来我会以萌新的角度来与大家一起学习C语言,我也不是什么大佬,在我写的教程中会尽量详细的把我遇到的问题写出来,也会结合一些网上的文章进行编写, ...

  5. asp.net core 实现支持自定义 Content-Type

    asp.net core 实现支持自定义 Content-Type Intro 我们最近有一个原本是内网的服务要上公网,在公网上有一层 Cloudflare 作为网站的公网流量提供者,CloudFla ...

  6. SpringBoot入门学习看这一篇就够了

    1.SpringBoot是什么? SpringBoot是一套基于Spring框架的微服务框架. 2.为什么需要SpringBoot 由于Spring是一个轻量级的企业开发框架,主要的功能就是用于整合和 ...

  7. MySQL深入研究--学习总结(5)

    前言 接上文,继续学习后续章节.细心的同学已经发现,我整理的并不一定是作者讲的内容,更多是结合自己的理解,加以阐述,所以建议结合原文一起理解. 第20章<幻读是什么,幻读有什么问题?> 先 ...

  8. 01-静态web服务器(Python)-面向对象的对比

    普通写法,静态web服务器: 先创建TCP服务器套接字,然后等待客户端(这里是浏览器)请求连接. 客户端发起请求,用线程来处理连接的建立,这样可以实现多任务(也就是并发) 连接后根据请求发送指定页面 ...

  9. clickhouse 亿级数据性能测试

    clickhouse 在数据分析技术领域早已声名远扬,如果还不知道可以 点这里 了解下. 最近由于项目需求使用到了 clickhouse 做分析数据库,于是用测试环境做了一个单表 6 亿数据量的性能测 ...

  10. CF524F And Yet Another Bracket Sequence 题解

    题目链接 算法:后缀数组+ST表+贪心   各路题解都没怎么看懂,只会常数巨大的后缀数组+ST表,最大点用时 \(4s\), 刚好可以过... 确定合法序列长度   首先一个括号序列是合法的必须满足以 ...