python实现栅栏密码加解密

article/2025/10/3 22:48:26

1.栅栏密码介绍

所谓栅栏密码,就是把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。不过栅栏密码本身有一个潜规则,就是组成栅栏的字母一般不会太多。 —百度百科

例如: 将明文字符串"hello world"分为2组,即栅栏(密钥)为2。

去掉空格:helloworld
2个1组:helloworld
取第一个字母组合:hlool
取第二个字母组合:elwrd
最后得到栅栏加密为:hloolelwrd 

注意:当len(strings)%n != 0时,缺少的位数使用@填充。len(strins)代表明文字符串长度,n代表栅栏数(密钥)。

2.栅栏密码加密

fence_Passwd_encode.py:

#!/usr/bin/python
# Env: python3
# Author: afei_0and1
# -*- coding: utf8 -*-def fence_Passwd_encode():string = input('请输入需要加密的明文:')num = int(input('请输入栅栏数(密钥):'))res = ''for i in range(int(num)):#遍历循环输出结果for j in range(int(string.__len__()/num + 0.5)):#print(j)try:res += string[j*num+i]except:passprint(res)if(__name__ == '__main__'):fence_Passwd_encode() 

3.栅栏密码解密(爆破)

fence_Passwd_burst.py:

#!/usr/bin/python
# Env: python3
# Author: afei_0and1
# -*- coding: utf8 -*-import sysdef fence_Passwd_burst():if (len(sys.argv) < 2):print("-----------------------------------------------")print(" ")print("Useg: python %s <fence_encryp_string>" % sys.argv[0])print("eg: python fence_Passwd_burst.py 'hloolelwrd'")print(" ")print("-----------------------------------------------")returnsecret = sys.argv[1]#栅栏密码解密,循环遍历有多少栏res = [step for step in range(2, len(secret)) if len(secret)%step == 0]for step in res:flag = ''#获取解密结果,以step栏进行遍历获取解密后的flagfor i in range(step):flag += secret[i::step]print('第%s栏: 解密结果:%s' %(str(step), flag))if(__name__ == '__main__'):fence_Passwd_burst() 

4.W型栅栏密码加密

W型栅栏密码是栅栏密码的变种,将明文按W型排列,然后将每一行的字母依次连起来组成密文,行数就是栅栏数,即密钥。解密则同样根据这个“W”图案,将每一列的字母依次连接起来组成明文。W型栅栏密码的密钥不只是密文长度的因数,任何小于密文长度大于1的整数都有可能。

fence_W-Type-encode.py:

#!/usr/bin/python
# Env: python3
# Author: afei_0and1
# -*- coding: utf8 -*-import sysdef generaget_W():if (len(sys.argv) < 3):print("-----------------------------------------------")print(" ")print("Useg: python %s <string> <col_num>" % sys.argv[0])print("eg: python fence_W-Type_encode.py helloworld 3")print(" ")print("-----------------------------------------------")returnstring = sys.argv[1]num = sys.argv[2]arr = [['*']*len(string) for i in range(int(num))]#行数,初始定义为0row = 0upflag = False#在矩阵上按“W”画出stringfor column in range(len(string)):arr[row][column] = string[column]if row == int(num)-1:upflag = Trueif row == 0:upflag = Falseif upflag:#上边界row -= 1else:#下边界row += 1#打印W图案for i in arr:print(i)#存放加密结果res = []for row in range(int(num)):for column in range(len(string)):if arr[row][column] != '*':res.append(arr[row][column])print(''.join(res))if(__name__ == '__main__'):generaget_W() 

http://chatgpt.dhexx.cn/article/IK6mcDnU.shtml

相关文章

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译名:啁啾(读音:“周纠”),是通信技术有关编码脉冲技术中的一种术语,是指对脉冲进行编码时,其载频在脉冲持续时间内线性地增加…

77GHz毫米波雷达快速chirp信号技术(一):测距原理

快速chirp信号指的是发射天线发射如下图所示信号: 单个chirp的解析式为 x ( t ) = s i n ( 2 ∗ p i ∗ ( f 0 + 0.5 ∗ S ∗ t ) . ∗ t ) x(t)=sin(2*pi*(f_0+0.5*S*t).*t) x(t)=sin(2∗pi∗(f0​+0.5∗S∗t).∗t)。 其中斜率 S S S达到 M H z / u s MHz/us MHz/us的数量级…

语音信号预处理3——计算原始chirp信号与滤波后chirp信号的相关性

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

MATLAB学习笔记之chirp信号的产生

chirp信号即线性调频信号&#xff0c;是指瞬时频率随时间呈线性变化的信号。 chirp信号的matlab程序实现方法如下&#xff1a; 1.可利用matlab自带的chirp函数生成。 chirp&#xff08;t&#xff0c;f0&#xff0c;T&#xff0c;f1&#xff09;&#xff1b; T表示脉冲宽度&…

chirp信号频谱(三角波和锯齿波)

普通chirp信号 ​​​​​​​ 频谱 图中信号载波3.2GHz&#xff0c;采样率256MHz&#xff0c;带宽100MHz&#xff0c;脉宽64us %% --------仿真数据--------------- fs256e6; Nr16384; ts 1/fs; fc3.2e9; B10…