python实现栅栏密码加密代码
时间: 2024-10-22 17:07:55 浏览: 59
栅栏密码是一种简单的加密方式,下面是Python实现栅栏密码加密的代码:
```
def fence_cipher_encrypt(text, key):
fence = [[] for i in range(key)]
rail = 0
direction = 1
for char in text:
fence[rail].append(char)
rail += direction
if rail == key:
direction = -1
rail = key - 2
elif rail == -1:
direction = 1
rail = 1
result = []
for rail in fence:
result += rail
return ''.join(result)
```
其中,text是要加密的明文,key是栅栏的数量。这个函数会返回加密后的密文。
--相关问题--:
1. 栅栏密码有哪些应用场景?
2. 栅栏密码的加密强度如何?
相关问题
用python实现栅栏密码的加密和解密
栅栏密码是一种简单的替换密码,其基本思想是将明文中的字符沿着一个规定的路径排列,然后从上到下,从左到右依次读取。举个例子,如果明文是"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
```
python实现栅栏密码
栅栏密码是一种简单的加密方法,将明文按照一定的规律分成若干组,然后将每组中的字符重新排列组成密文。
以下是一个简单的 Python 实现:
```python
def fence_cipher(text, n):
# 将明文按照栏数分组
groups = [''] * n
for i in range(len(text)):
groups[i % n] += text[i]
# 将每组字符重新排列组成密文
cipher_text = ''.join(groups)
return cipher_text
# 测试
text = 'hello world'
cipher_text = fence_cipher(text, 3)
print(cipher_text) # 'hlwlodreo l'
```
解释:
`fence_cipher` 函数接受两个参数:明文字符串 `text` 和栏数 `n`。函数首先将明文字符串按照栏数分成 `n` 个组,将每个字符依次放入这些组中。然后,将每组中的字符重新排列组成密文字符串 `cipher_text`,最后返回密文字符串。
在测试中,输入明文字符串 `'hello world'` 和栏数 `3`,输出密文字符串 `'hlwlodreo l'`。
阅读全文