53 lines
1.4 KiB
Python
53 lines
1.4 KiB
Python
import os
|
||
|
||
|
||
def generate_key_pair():
|
||
"""
|
||
生成一对新的密钥a和b,使得a XOR b等于原始key
|
||
:return: (a, b, key) 元组,每个元素都是32字节的字节数组
|
||
"""
|
||
# 原始key值
|
||
key = bytes([
|
||
0x5d, 0xf9, 0xef, 0xc4, 0x5d, 0xcc, 0xc7, 0x8d, 0xc9, 0x86, 0x34, 0x11, 0x6f, 0xb4, 0xcf, 0x75,
|
||
0xbf, 0x24, 0x47, 0x9d, 0xd6, 0x5d, 0x83, 0x4b, 0xa6, 0xc0, 0xde, 0x27, 0x91, 0x92, 0xb1, 0x63
|
||
])
|
||
|
||
# 随机生成a
|
||
a = os.urandom(32)
|
||
|
||
# 计算b = key XOR a
|
||
b = bytes([key[i] ^ a[i] for i in range(32)])
|
||
|
||
return a, b, key
|
||
|
||
|
||
def format_hex_array(data):
|
||
"""
|
||
将字节数组格式化为C++风格的十六进制数组
|
||
:param data: 字节数组
|
||
:return: 格式化后的字符串
|
||
"""
|
||
return "{" + ",".join([f"0x{b:02x}" for b in data]) + "}"
|
||
|
||
|
||
def generate_new_key_pair():
|
||
"""
|
||
生成新的密钥对并打印出来
|
||
"""
|
||
a, b, key = generate_key_pair()
|
||
|
||
print("原始key:")
|
||
print(format_hex_array(key))
|
||
print("\n新的密钥对:")
|
||
print("a =", format_hex_array(a))
|
||
print("b =", format_hex_array(b))
|
||
|
||
# 验证a XOR b是否等于key
|
||
verify_key = bytes([a[i] ^ b[i] for i in range(32)])
|
||
assert verify_key == key, "验证失败:a XOR b 不等于 key"
|
||
print("\n验证成功:a XOR b 等于 key")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
generate_new_key_pair()
|