init-commit

This commit is contained in:
lilinyang 2025-05-23 15:27:15 +08:00
commit 18a552597a
3461 changed files with 1150579 additions and 0 deletions

View file

@ -0,0 +1,204 @@
from .BaseCipherEnvironment import BaseCipherEnvironment
import re
def generate_table(key = ''):
alphabet = 'ABCDEFGHIJKLMNOPRSTUVWXYZ'
table = [[0] * 5 for row in range(5)]
key = re.sub(r'[\W]', '', key).upper()
for row in range(5):
for col in range(5):
if len(key) > 0:
table[row][col] = key[0]
alphabet = alphabet.replace(key[0], '')
key = key.replace(key[0], '')
else:
table[row][col] = alphabet[0]
alphabet = alphabet[1:]
return table
def position(table, ch):
for row in range(5):
for col in range(5):
if table[row][col] == ch:
return (row, col)
return (None, None)
class KorFourSquareCipherEnvironment(BaseCipherEnvironment):
def __init__(self, *args, **kwargs):
problem_description = ''
super().__init__(problem_description, *args, **kwargs)
@property
def cipher_name(self) -> str:
return 'Kor_rule11_FourSquareCipher'
def encode(self, text, **kwargs):
print("开始加密过程...")
print(f"原始文本: {text}")
# 清理文本
plaintext = ''.join(char.upper() for char in text if char.isalpha())
plaintext = plaintext.replace('Q', '')
print(f"清理后的文本(移除非字母字符并转大写移除Q): {plaintext}")
# 如果长度为奇数添加X
if len(plaintext) % 2 != 0:
plaintext += 'X'
print(f"文本长度为奇数添加X: {plaintext}")
# 准备密钥表格
key = ['ECHO', 'VORTEX']
table = [['K', 'L', 'M', 'N', 'O'],
['P', 'R', 'S', 'T', 'U'],
['V', 'W', 'X', 'Y', 'Z'],
['A', 'B', 'C', 'D', 'E'],
['F', 'G', 'H', 'I', 'J']]
topRight = generate_table(key[0])
bottomLeft = generate_table(key[1])
print("\n开始逐对字母加密:")
ciphertext = ''
for i in range(0, len(plaintext), 2):
pair = plaintext[i:i+2]
print(f"\n处理字母对: {pair}")
# 在原始表格中找到位置
pos1 = position(table, pair[0])
pos2 = position(table, pair[1])
print(f"第一个字母 {pair[0]} 在原始表格中的位置: ({pos1[0]}, {pos1[1]})")
print(f"第二个字母 {pair[1]} 在原始表格中的位置: ({pos2[0]}, {pos2[1]})")
# 在新表格中找到对应字母
encrypted_pair = topRight[pos1[0]][pos1[1]] + bottomLeft[pos2[0]][pos2[1]]
print(f"加密后的字母对: {encrypted_pair}")
ciphertext += encrypted_pair
print(f"\n最终加密结果: {ciphertext}")
return ciphertext
def decode(self, text, **kwargs):
print("开始解密过程...")
print(f"加密文本: {text}")
# 准备密钥表格
key = ['ECHO', 'VORTEX']
table = [['K', 'L', 'M', 'N', 'O'],
['P', 'R', 'S', 'T', 'U'],
['V', 'W', 'X', 'Y', 'Z'],
['A', 'B', 'C', 'D', 'E'],
['F', 'G', 'H', 'I', 'J']]
topRight = generate_table(key[0])
bottomLeft = generate_table(key[1])
print("\n开始逐对字母解密:")
plaintext = ''
for i in range(0, len(text), 2):
pair = text[i:i+2]
print(f"\n处理加密字母对: {pair}")
# 在新表格中找到位置
pos1 = position(topRight, pair[0])
pos2 = position(bottomLeft, pair[1])
print(f"第一个字母 {pair[0]} 在ECHO表格中的位置: ({pos1[0]}, {pos1[1]})")
print(f"第二个字母 {pair[1]} 在VORTEX表格中的位置: ({pos2[0]}, {pos2[1]})")
# 在原始表格中找到对应字母
decrypted_pair = table[pos1[0]][pos1[1]] + table[pos2[0]][pos2[1]]
print(f"解密后的字母对: {decrypted_pair}")
plaintext += decrypted_pair
print(f"\n最终解密结果: {plaintext}")
return plaintext
def get_encode_rule(self, ):
return """加密规则:
- 输入:
- 明文: 大写字母字符串不含标点和空格
- 输出:
- 密文: 大写字母字符串
- 准备:
以下是经过整理后的文字
---
### 5x5 网格布局
共有四个5x5的字符网格每个网格代表了不同的排列方式
1. **网格1 原始网格**
这是最初的字符排列按照特定顺序组织如下
```
K L M N O
P R S T U
V W X Y Z
A B C D E
F G H I J
```
2. **网格2 ECHO 网格**
该网格根据"ECHO"这个词进行了重新排列
```
E C H O A
B D F G I
J K L M N
P R S T U
V W X Y Z
```
3. **网格3 VORTEX 网格**
此网格基于"VORTEX"一词进行了独特的字符重组
```
V O R T E
X A B C D
F G H I J
K L M N P
S U W Y Z
```
4. **网格4 重复原始网格**
最后一个网格与第一个原始网格完全相同没有进行任何改变
```
K L M N O
P R S T U
V W X Y Z
A B C D E
F G H I J
```
每个网格展示了不同主题词下字符的独特排列
- 加密步骤:
- 清理明文移除空格和非字母字符移除字母Q转换为大写
- 如果明文长度为奇数添加字母'X'使其成为偶数
- 将处理后的明文分成两个字母一组
- 对于每组两个字母p1,p2:
- 在网格1和网格4中找到第一个字母和第二个字母的位置
- 在网格2和网格3中找到这两个位置对应的字母用这两个字母作为该组的加密结果
- 连接所有加密后的字母组形成最终密文"""
def get_decode_rule(self, ):
return """解密规则:
- 输入:
- 密文: 大写字母字符串
- 输出:
- 明文: 大写字母字符串
- 准备:
- 四个5x5网格(与加密相同)
- 解密步骤(与加密步骤相反):
- 清理密文移除空格和非字母字符转换为大写
- 将处理后的密文分成两个字母一组
- 对于每组两个字母c1,c2:
- 在网格2和网格3中找到第一个字母和第二个字母的位置
- 在网格1和网格4中找到这两个位置对应的字母用这两个字母作为该组的解密结果
- 连接所有解密后的字母组形成最终明文"""