python实现栅栏密码加解密

本文介绍了栅栏密码的原理,通过将明文分成多组进行加密,当明文长度与栅栏数不匹配时用@填充。同时,详细讲解了Python实现的栅栏密码加密和解密过程,以及W型栅栏密码的加密方法,解密时遵循W型排列的规则。提供相关代码示例fence_Passwd_encode.py、fence_Passwd_burst.py和fence_W-Type-encode.py。
摘要由CSDN通过智能技术生成

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_enco
栅栏密码是一种简单的替换密码,其基本思想是将明文中的字符沿着一个规定的路径排列,然后从上到下,从左到右依次读取。举个例子,如果明文是"HELLO WORLD",路径是3,那么加密后的密文就是"HOLWRLELD O"。 加密过程: 1. 将明文按照规定的路径排列成矩阵。 2. 按照行优先的顺序读取矩阵中的字符,得到密文。 解密过程: 1. 根据密文长度和路径计算出矩阵的行数和列数。 2. 将密文按照列优先的顺序排列成矩阵。 3. 按照行优先的顺序读取矩阵中的字符,得到明文。 下面是用Python实现栅栏密码的加密和解密: ```python def encrypt(plain_text, path): # 将明文按照路径排列成矩阵 rows = len(plain_text) // path if len(plain_text) % path != 0: rows += 1 matrix = [[''] * path for i in range(rows)] index = 0 for i in range(rows): for j in range(path): if index < len(plain_text): matrix[i][j] = plain_text[index] index += 1 else: break # 按行优先顺序读取矩阵中的字符,得到密文 cipher_text = '' for j in range(path): for i in range(rows): cipher_text += matrix[i][j] return cipher_text def decrypt(cipher_text, path): # 根据密文长度和路径计算出矩阵的行数和列数 rows = len(cipher_text) // path if len(cipher_text) % path != 0: rows += 1 # 将密文按照列优先的顺序排列成矩阵 matrix = [[''] * rows for i in range(path)] index = 0 for j in range(path): for i in range(rows): if index < len(cipher_text): matrix[j][i] = cipher_text[index] index += 1 else: break # 按照行优先的顺序读取矩阵中的字符,得到明文 plain_text = '' for i in range(rows): for j in range(path): plain_text += matrix[j][i] return plain_text ``` 下面是一个示例: ```python plain_text = 'HELLO WORLD' path = 3 cipher_text = encrypt(plain_text, path) print(cipher_text) plain_text2 = decrypt(cipher_text, path) print(plain_text2) ``` 输出结果: ``` HOLWRLELD O HELLO WORLD ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值