mirror of
https://github.com/InternLM/InternBootcamp.git
synced 2026-04-19 12:58:04 +00:00
158 lines
6.1 KiB
Python
Executable file
158 lines
6.1 KiB
Python
Executable file
from .BaseCipherEnvironment import BaseCipherEnvironment
|
||
|
||
class JeffersonCipher:
|
||
def __init__(self):
|
||
self.wheel_configuration = [
|
||
"ABCEIGDJFVUYMHTQKZOLRXSPWN",
|
||
"ACDEHFIJKTLMOUVYGZNPQXRWSB",
|
||
"ADKOMJUBGEPHSCZINXFYQRTVWL",
|
||
"AEDCBIFGJHLKMRUOQVPTNWYXZS",
|
||
"AFNQUKDOPITJBRHCYSLWEMZVXG",
|
||
"AGPOCIXLURNDYZHWBJSQFKVMET",
|
||
"AHXJEZBNIKPVROGSYDULCFMQTW",
|
||
"AIHPJOBWKCVFZLQERYNSUMGTDX",
|
||
"AJDSKQOIVTZEFHGYUNLPMBXWCR",
|
||
"AKELBDFJGHONMTPRQSVZUXYWIC",
|
||
"ALTMSXVQPNOHUWDIZYCGKRFBEJ",
|
||
"AMNFLHQGCUJTBYPZKXISRDVEWO",
|
||
"ANCJILDHBMKGXUZTSWQYVORPFE",
|
||
"AODWPKJVIUQHZCTXBLEGNYRSMF",
|
||
"APBVHIYKSGUENTCXOWFQDRLJZM",
|
||
"AQJNUBTGIMWZRVLXCSHDEOKFPY",
|
||
"ARMYOFTHEUSZJXDPCWGQIBKLNV",
|
||
"ASDMCNEQBOZPLGVJRKYTFUIWXH",
|
||
"ATOJYLFXNGWHVCMIRBSEKUPDZQ",
|
||
"AUTRZXQLYIOVBPESNHJWMDGFCK",
|
||
"AVNKHRGOXEYBFSJMUDQCLZWTIP",
|
||
"AWVSFDLIEBHKNRJQZGMXPUCOTY",
|
||
"AXKWREVDTUFOYHMLSIQNJCPGBZ",
|
||
"AYJPXMVKBQWUGLOSTECHNZFRID",
|
||
"AZDNBUHYFWJLVGRCQMPSOEXTKI"
|
||
]
|
||
|
||
def encrypt(self, message):
|
||
encrypted_message = []
|
||
wheel_position = 0
|
||
|
||
for char in message:
|
||
current_wheel = self.wheel_configuration[wheel_position]
|
||
index = current_wheel.index(char)
|
||
encrypted_char = current_wheel[(index + 1) % 26]
|
||
encrypted_message.append(encrypted_char)
|
||
wheel_position = (wheel_position + 1) % len(self.wheel_configuration)
|
||
|
||
return ''.join(encrypted_message)
|
||
|
||
def decrypt(self, encrypted_message):
|
||
decrypted_message = []
|
||
wheel_position = 0
|
||
|
||
for char in encrypted_message:
|
||
current_wheel = self.wheel_configuration[wheel_position]
|
||
index = current_wheel.index(char)
|
||
decrypted_char = current_wheel[(index - 1) % 26]
|
||
decrypted_message.append(decrypted_char)
|
||
wheel_position = (wheel_position + 1) % len(self.wheel_configuration)
|
||
|
||
return ''.join(decrypted_message)
|
||
|
||
|
||
class KorJeffersonCipherEnvironment(BaseCipherEnvironment):
|
||
def __init__(self, *args, **kwargs):
|
||
problem_description = ''
|
||
super().__init__(problem_description, *args, **kwargs)
|
||
|
||
@property
|
||
def cipher_name(self) -> str:
|
||
return 'Kor_rule10_JeffersonCipher'
|
||
|
||
def encode(self, text, **kwargs):
|
||
# 将输入转换为大写字母并移除非字母字符
|
||
text = ''.join([char.upper() for char in text if char.isalpha()])
|
||
print(f"处理后的输入文本: {text}")
|
||
|
||
cipher = JeffersonCipher()
|
||
print("初始化Jefferson密码轮...")
|
||
|
||
print("开始加密过程:")
|
||
print("- 从第1个密码轮开始")
|
||
encrypted = cipher.encrypt(text)
|
||
print(f"- 对每个字符:")
|
||
for i, (plain, cipher) in enumerate(zip(text, encrypted)):
|
||
wheel_num = (i % 25) + 1
|
||
print(f" * 在第{wheel_num}个密码轮上,将字符 {plain} 替换为下一个字符 {cipher}")
|
||
|
||
print(f"加密完成,结果: {encrypted}")
|
||
return encrypted
|
||
|
||
def decode(self, text, **kwargs):
|
||
cipher = JeffersonCipher()
|
||
print("初始化Jefferson密码轮...")
|
||
|
||
print("开始解密过程:")
|
||
print("- 从第1个密码轮开始")
|
||
decrypted = cipher.decrypt(text)
|
||
print(f"- 对每个字符:")
|
||
for i, (cipher, plain) in enumerate(zip(text, decrypted)):
|
||
wheel_num = (i % 25) + 1
|
||
print(f" * 在第{wheel_num}个密码轮上,将字符 {cipher} 替换为前一个字符 {plain}")
|
||
|
||
print(f"解密完成,结果: {decrypted}")
|
||
return decrypted
|
||
|
||
def get_encode_rule(self, ):
|
||
return """加密规则:
|
||
- 输入:
|
||
- 明文: 仅包含大写字母的字符串,不含标点和空格
|
||
- 输出:
|
||
- 密文: 大写字母字符串
|
||
- 准备:
|
||
- 25个密码轮,每个密码轮包含26个字母的不同排列
|
||
[
|
||
"ABCEIGDJFVUYMHTQKZOLRXSPWN",
|
||
"ACDEHFIJKTLMOUVYGZNPQXRWSB",
|
||
"ADKOMJUBGEPHSCZINXFYQRTVWL",
|
||
"AEDCBIFGJHLKMRUOQVPTNWYXZS",
|
||
"AFNQUKDOPITJBRHCYSLWEMZVXG",
|
||
"AGPOCIXLURNDYZHWBJSQFKVMET",
|
||
"AHXJEZBNIKPVROGSYDULCFMQTW",
|
||
"AIHPJOBWKCVFZLQERYNSUMGTDX",
|
||
"AJDSKQOIVTZEFHGYUNLPMBXWCR",
|
||
"AKELBDFJGHONMTPRQSVZUXYWIC",
|
||
"ALTMSXVQPNOHUWDIZYCGKRFBEJ",
|
||
"AMNFLHQGCUJTBYPZKXISRDVEWO",
|
||
"ANCJILDHBMKGXUZTSWQYVORPFE",
|
||
"AODWPKJVIUQHZCTXBLEGNYRSMF",
|
||
"APBVHIYKSGUENTCXOWFQDRLJZM",
|
||
"AQJNUBTGIMWZRVLXCSHDEOKFPY",
|
||
"ARMYOFTHEUSZJXDPCWGQIBKLNV",
|
||
"ASDMCNEQBOZPLGVJRKYTFUIWXH",
|
||
"ATOJYLFXNGWHVCMIRBSEKUPDZQ",
|
||
"AUTRZXQLYIOVBPESNHJWMDGFCK",
|
||
"AVNKHRGOXEYBFSJMUDQCLZWTIP",
|
||
"AWVSFDLIEBHKNRJQZGMXPUCOTY",
|
||
"AXKWREVDTUFOYHMLSIQNJCPGBZ",
|
||
"AYJPXMVKBQWUGLOSTECHNZFRID",
|
||
"AZDNBUHYFWJLVGRCQMPSOEXTKI"
|
||
]
|
||
- 加密步骤:
|
||
- 初始选择第1个密码轮
|
||
- 对明文中的每个字符p:
|
||
- 在当前密码轮上找到字符p,用其后一个字符替换得到密文字符
|
||
- 如果当前字符在密码轮末尾,则回到密码轮开头
|
||
- 移动到下一个密码轮处理下一个字符,当到达最后一个密码轮时,返回第一个密码轮继续加密过程"""
|
||
|
||
def get_decode_rule(self, ):
|
||
return """解密规则:
|
||
- 输入:
|
||
- 密文: 大写字母字符串
|
||
- 输出:
|
||
- 明文: 大写字母字符串
|
||
- 准备:
|
||
- 25个密码轮,与加密相同
|
||
- 解密步骤(与加密步骤相反):
|
||
- 初始选择第1个密码轮
|
||
- 对密文中的每个字符c:
|
||
- 在当前密码轮上找到字符c,用其前一个字符替换得到明文字符
|
||
- 如果当前字符在密码轮开头,则回到密码轮末尾
|
||
- 移动到下一个密码轮处理下一个字符,当到达最后一个密码轮时,返回第一个密码轮继续解密过程"""
|