详解W形状的栅栏密码

article/2025/10/3 22:46:07

最近做密码学题目的时候碰到了一个特别的栅栏密码:加密后为:ccehgyaefnpeoobe{lcirg}epriec_ora_g,由题目得知密钥为5,在网上用普通的解码器只会得到一个令人黑人问号的字符串,在网上找题解的时候才知道这叫W形栅栏密码
话说我在网上搜资料的时候没有搜到太多与这有关的东西,本来想做一个不动脑子的伸手党。。。。现实却在逼迫我不得不去思考。。。。我这算第一个写这个的人不[手动滑稽]
在这里插入图片描述
如图,字符串“123456789”的密钥为3的话,就如上图所排列,然后得到密文:“159246837”。
然后该怎样去写一个解这样密码的程序呢,蒟蒻的我陷入了深深的思考。。。。

--------------------------------------------------------------很久很久之后--------------------------------------------
发现:当key=3时,一共分成了三行,打乱前的第一第五第九分别变成了打乱后的第一二三,这两个数之间相差4也就是(key-1)2,第key行与第一行相同,。再看第二行,难道是2n吗???我决定将数据放大再研究一番,当len=35,key=5时(这个就自己画一画吧)然后你就会发现:首行和尾行的间隔依旧不变,假设行数为i,当当前数为第2行的奇数的时候,下一个数字为2+6=8也就是(key-i)*2,若当前数为第二行偶数的时候,下一个数字为8+2=10也就是(i-1)*2。而且每一行的第一个数字就是这一行的行数。对不对?再用C++水个代码:

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
char str[10000];
char ans[1000];
int line=0;
int key;
int len;
int sit;
int ssit;//用于判断当前字符的位置为奇数还是偶数
int check()//我刚才的思想
{if(line==1 ||line==key)return sit+(key-1)*2;else{if(ssit%2==1)return sit+(key-line)*2;else return sit+2*(line-1);}
}
int main()
{int i;cin>>str;scanf("%d",&key);len=strlen(str);for(i=len;i>0;i--)str[i]=str[i-1];//给他往前挪一位,方便操作。line=1;sit=1;ssit=1;for(i=1;i<=len;i++)//把密文按顺序安排到原来明文的位置上{ans[sit]=str[i];sit=check();查找下一个位置ssit++;if(sit>len)//超过长度了这个位置肯定不存在字符{line++;sit=line;//因为每一行第一个字符的位置恰好与行数的数字一样ssit=1;}}for(i=1;i<=len;i++)printf("%c",ans[i]);//cout<<ans;应该也行,没改return 0;
}

在这里插入图片描述
哼哼,谁也无法阻止我去找到密码!!!
あるものは隠された。へへへ
はい、以上終わりました、ご覧くださってありがとうございます。
2019.10.1更新:
TMD我写这篇文章之前一个写代码的都没有,我这篇一出来再搜索W栅栏密码都更新了自己的脚本。F**k,就不能让我做个伸手党吗[手动滑稽]


http://chatgpt.dhexx.cn/article/02dfoRgP.shtml

相关文章

栏栅解密

围在栏栅中的爱&#xff08;栏栅密码&#xff09; 我们需要了解什么是栏栅密码&#xff0c;经过我的百度了解到 所谓栅栏密码&#xff0c;就是把要加密的明文分成N个一组&#xff0c;然后把每组的第1个字连起来&#xff0c;形成一段无规律的话。 不过栅栏密码本身有一个潜规则…

【网络安全】python实现栅栏密码加解密

1.栅栏密码介绍 所谓栅栏密码&#xff0c;就是把要加密的明文分成N个一组&#xff0c;然后把每组的第1个字连起来&#xff0c;形成一段无规律的话。不过栅栏密码本身有一个潜规则&#xff0c;就是组成栅栏的字母一般不会太多。 —百度百科 例如&#xff1a; 将明文字符串&quo…

W型加密栅栏密码解密

题目描述&#xff1a;被小鱼一连将了两军&#xff0c;你心里更加不服气了。两个人一起继续往前走&#xff0c; 一路上杂耍卖艺的很多&#xff0c;但是你俩毫无兴趣&#xff0c;直直的就冲着下一个谜题的地方去了。 到了一看&#xff0c;这个谜面看起来就已经有点像答案了样子了…

python实现栅栏密码加解密

1.栅栏密码介绍 所谓栅栏密码&#xff0c;就是把要加密的明文分成N个一组&#xff0c;然后把每组的第1个字连起来&#xff0c;形成一段无规律的话。不过栅栏密码本身有一个潜规则&#xff0c;就是组成栅栏的字母一般不会太多。 —百度百科 例如&#xff1a; 将明文字符串&quo…

CTF之做题总结(二)

Crypto&#xff08;密码学&#xff09;做题记录 1、Railfence&#xff08;栅栏密码&#xff09; 我们先来看一下题目描述&#xff1a; 题目附件的内容是&#xff1a; ccehgyaefnpeoobe{lcirg}epriec_ora_g 从题目Railfence&#xff08;栅栏密码&#xff09;和题目描述中我们…

攻防世界 crypto Railfence

Railfence 题目 附件 ccehgyaefnpeoobe{lcirg}epriec_ora_g 栅栏密码 ①把将要传递的信息中的字母交替排成上下两行。 ②再将下面一行字母排在上面一行的后边&#xff0c;从而形成一段密码。 ③例如&#xff1a; 明文&#xff1a;THE LONGEST DAY MUST HAVE AN END 加密&…

sql server 替换字符串中的某些字符

declare stringFinal nvarchar(128) declare index intset stringOrigin 111,222,333 set stringChange 999 --将字符串stringOrigin中“,”之前的部分换成stringChange--先获取“,”在stringOrigin中的索引 set index charindex(,,stringOrigin,1) --charindex(想要找到的字…

【MySql】sql语句--批量替换字符串

【需求】 项目中需要批量替换mysql数据库中&#xff0c;指定表中的指定字段中的字符串。 【实现】 方法一&#xff1a; 可以用mysql可视化工具---Navicat&#xff0c;直接ctrlF&#xff0c;然后点击替换前的选框。如下图&#xff1a; 也或者可以从菜单中找到替换&#xff0c;…

sql 字符串函数

代码写出来如下&#xff1a; 代码有点多没截完 第二个表如下&#xff1a; 代码如下展示&#xff1a; 第三个表如下&#xff1a; 代码如下&#xff1a; 第四张表 代码如下&#xff1a; 字符串函数 1.charindex 用来寻找这个字在字符串中的位置 select charindex(SQl,my SQL C…

SQL截取字符串和替换字段

1.要操作的数据库的表 2. SELECT left(operateperson,2) from bus_inport left(str,length) str&#xff1a;被截取的字符串。 length&#xff1a;截取的长度 从左边开始截取 执行的结果&#xff1a; 3. SELECT right(operateperson,1) from bus_inport right(str,length)…

SQL Server 数据库之字符串函数

字符串函数 1. 概述2. ASCII 函数3. Charindex 函数4. Left 函数5. Right 函数6. Len 函数7. Replace 函数8. Reverse 函数9. Str 函数10. Substring 函数 1. 概述 用字符串函数能对输入字符串进行类型转换和长度设置等操作&#xff0c;是数据库处理中常用的函数类型&#xff…

sql server中replace()函数,可用于字符串替换

语法 sql server中replace()函数&#xff0c;可用于字符串替换 replace(string1,string2,string3) string1:搜索的文本 string2&#xff1a;查找的文本 string3&#xff1a;替换的文本 示例-名字替换 select replace(张三,三,四) 结果 张四 延伸示例-分类 分类&#x…

sqlserver替换特殊字符

1.直接转换 select REPLACE(列名,’’,’’) from 表 2.函数转换 先查询字符的ascii码 select ascii()得到结果 通过char转换成字符串 char(64) --返回然后去替换 select REPLACE(列名,char(64),) from 表常用字符串函数文档 https://blog.csdn.net/qq_39569480/article…

语音信号预处理4——绘制接滤波后chirp信号的时域图和频域图

写在前面&#xff1a;仅作为个人学习笔记&#xff0c;便于以后查阅&#xff0c;如对你有帮助&#xff0c;荣幸之至&#xff0c;如有错误&#xff0c;欢迎评论指正 编程软件&#xff1a;matlab R2018b 系统&#xff1a; win10 系列文章目录 chirp信号的生成与接收对接收到的c…

77GHz毫米波雷达快速chirp信号技术(四):TDM MIMO

设:天线如下图所示:有两个发射天线,4个接收天线 4个虚拟接收天线。接收天线间距 λ 2 \frac{\lambda}{2} 2λ​。发射天线间距 2 λ 2\lambda 2λ。 角度分辨率

声音信标发出白噪声和发出chirp信号的对比测距说明

在 十五届全国大学生智能汽车竞赛 中安排后一个 声音信标导航 竞赛组别。参赛同学反馈&#xff0c;声音信标发送的 Chirp信号 在远处听起来会令人产生一种恐慌紧张的感觉&#xff0c;极大扰民。 如果将信标的声音改成同样宽带音频的白噪声信号&#xff0c;在听觉上与Chirp信号…

Chirp信号公式与对离散生成算法之间的差异

讨论产生线性频率变化的公式和它的离散公式之间的差异&#xff0c;并提出Chirp信号的修改方案。 Chirp信号的公式 对于固定频率 f 1 f_1 f1​的信号&#xff0c;它的表达式为&#xff1a; r ( t ) cos ⁡ ( 2 π ⋅ f 1 ⋅ t ) r\left( t \right) \cos \left( {2\pi \cdot …

matlab啁啾信号,啁啾信号chirp(扫频余弦信号)

Chirp信号 Generate swept-frequency cosine (chirp) signal Chirp信号是一个典型的非平稳信号,在通信、声纳、雷达等领域具有广泛的应用, Chirp译名:啁啾(读音:“周纠”),是通信技术有关编码脉冲技术中的一种术语,是指对脉冲进行编码时,其载频在脉冲持续时间内线性地增加…