InternBootcamp/internbootcamp/libs/cipher/KorECCCipherEnvironment.py
2025-05-23 15:27:15 +08:00

132 lines
3.8 KiB
Python
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from .BaseCipherEnvironment import BaseCipherEnvironment
def get_inverse(mu, p):
for i in range(1, p):
if (i*mu)%p == 1:
return i
return -1
def get_gcd(zi, mu):
if mu:
return get_gcd(mu, zi%mu)
else:
return zi
def get_np(x1, y1, x2, y2, a, p):
flag = 1
if x1 == x2 and y1 == y2:
zi = 3 * (x1 ** 2) + a
mu = 2 * y1
else:
zi = y2 - y1
mu = x2 - x1
if zi* mu < 0:
flag = 0
zi = abs(zi)
mu = abs(mu)
gcd_value = get_gcd(zi, mu)
zi = zi // gcd_value
mu = mu // gcd_value
inverse_value = get_inverse(mu, p)
k = (zi * inverse_value)
if flag == 0:
k = -k
k = k % p
x3 = (k ** 2 - x1 - x2) % p
y3 = (k * (x1 - x3) - y1) % p
return x3,y3
def get_rank(x0, y0, a, b, p):
x1 = x0
y1 = (-1*y0)%p
tempX = x0
tempY = y0
n = 1
while True:
n += 1
p_x,p_y = get_np(tempX, tempY, x0, y0, a, p)
if p_x == x1 and p_y == y1:
return n+1
tempX = p_x
tempY = p_y
class KorECCCipherEnvironment(BaseCipherEnvironment):
def __init__(self, *args, **kwargs):
problem_description = ''
super().__init__(problem_description, *args, **kwargs)
@property
def cipher_name(self) -> str:
return 'Kor_rule24_ECCCipher'
def encode(self, text, **kwargs):
print("开始加密过程...")
# 将输入转换为大写字母,去除标点和空格
text = ''.join([char.upper() for char in text if char.isalpha()])
print(f"处理后的输入文本: {text}")
k_q_x = 12
print(f"使用预设的k_q_x值: {k_q_x}")
cipher = []
for char in text:
print(f"\n处理字符: {char}")
ascii_value = ord(char)
print(f"对应的ASCII值: {ascii_value}")
encrypted_value = ascii_value * k_q_x
print(f"加密后的值: {encrypted_value}")
cipher.append(str(encrypted_value))
result = ','.join(cipher)
print(f"\n最终加密结果: {result}")
return result
def decode(self, text, **kwargs):
print("开始解密过程...")
print(f"收到的加密文本: {text}")
k_q_x = 12
print(f"使用预设的k_q_x值: {k_q_x}")
numbers = text.split(',')
plain_text = ""
for num in numbers:
print(f"\n处理数字: {num}")
decrypted_value = int(num) // k_q_x
print(f"除以k_q_x后的值: {decrypted_value}")
char = chr(decrypted_value)
print(f"对应的字符: {char}")
plain_text += char
print(f"\n最终解密结果: {plain_text}")
return plain_text
def get_encode_rule(self):
return """加密规则:
- 输入:
- 明文: 不含标点和空格的大写字母字符串
- 输出:
- 密文: 由逗号分隔的数字序列,例如"y1,y2,..."
- 准备:
- k_q_x值: 12
- 加密步骤:
- 对明文中的每个字母p:
- 获取字母p对应的ASCII码值x
- 计算x * k_q_x作为该字母对应的密文数字y
- 最后将所有y值用逗号连接得到最终密文"""
def get_decode_rule(self):
return """解密规则:
- 输入:
- 密文: 由逗号分隔的数字序列,例如"y1,y2,..."
- 输出:
- 明文: 不含标点和空格的大写字母字符串
- 准备:
- k_q_x值: 12
- 解密步骤:
- 对密文中的每个数字c:
- 计算z = c // k_q_x其中//表示整数除法运算,返回商的整数部分
- 根据z对应的ASCII码值找到对应的字母作为明文字母p
- 最后将所有p连接得到最终明文"""