Python实现栅栏密码的加密解密方法详解

 更新时间:2023年01月16日 11:38:23   作者:做网安的小王  
这篇文章主要介绍了Python实现栅栏密码的加密解密方法,所谓栅栏密码,就是把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。不过栅栏密码本身有一个潜规则,就是组成栅栏的字母一般不会太多

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
# -*- coding: utf8 -*-
import sys
def 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
# -*- coding: utf8 -*-
import sys
def 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() 

到此这篇关于Python实现栅栏密码的加密解密方法详解的文章就介绍到这了,更多相关Python栅栏密码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • Python迭代器iterator生成器generator使用解析

    Python迭代器iterator生成器generator使用解析

    这篇文章主要介绍了Python迭代器iterator生成器generator使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • opencv resize图片为正方形尺寸的实现方法

    opencv resize图片为正方形尺寸的实现方法

    这篇文章主要介绍了opencv resize图片为正方形尺寸的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • python监控文件或目录变化

    python监控文件或目录变化

    这篇文章主要为大家详细介绍了python监控文件或目录变化的实现代码,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • pandas Dataframe行列读取的实例

    pandas Dataframe行列读取的实例

    今天小编就为大家分享一篇pandas Dataframe行列读取的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • 如何使用 Pylint 来规范 Python 代码风格(来自IBM)

    如何使用 Pylint 来规范 Python 代码风格(来自IBM)

    本文通过详细的理论介绍和简单易懂的实例全面介绍了 Python 代码分析工具 Pylint。相信读者看完后一定可以轻松地将 Pylint 运用到自己的开发工程中
    2018-04-04
  • 简单介绍Python中的几种数据类型

    简单介绍Python中的几种数据类型

    Python基本内置数据类型有很多种,比如:整型(数字)、字符串、元组、列表、字典和布尔类型,下面就来给大家详细介绍下
    2016-01-01
  • Python实现对特定列表进行从小到大排序操作示例

    Python实现对特定列表进行从小到大排序操作示例

    这篇文章主要介绍了Python实现对特定列表进行从小到大排序操作,涉及Python文件读取、计算、正则匹配、排序等相关操作技巧,需要的朋友可以参考下
    2019-02-02
  • Python制作一个WiFi密码测试工具

    Python制作一个WiFi密码测试工具

    这篇文章主要为大家详细介绍了Python如何通过字典攻击方式帮助用户测试 Wi-Fi 网络的安全性,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2025-01-01
  • Python使用functools模块中的partial函数生成偏函数

    Python使用functools模块中的partial函数生成偏函数

    所谓偏函数即是规定了固定参数的函数,在函数式编程中我们经常可以用到,这里我们就来看一下Python使用functools模块中的partial函数生成偏函数的方法
    2016-07-07
  • 关于pyqtSignal的基本使用

    关于pyqtSignal的基本使用

    这篇文章主要介绍了关于pyqtSignal的基本使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06

最新评论