from hub import methods, Global class Key(object): @classmethod def create_key(cls, **params): """ 生成key """ # --- check --- key_path = '/home/server/key' if methods.is_file(key_path): methods.remove_file(key_path) # --- get serial --- ssh = Global.SSHClient('172.18.0.1', 22, 'server', 'server') serial = ssh.run_command("cat /sys/firmware/devicetree/base/serial-number").strip('\x00') # --- generate salt --- salt = methods.now_ts() salt = methods.reverse(str(salt)) salt = 0 # --- generate key --- keys = methods.text_to_b64(f"{serial}|{salt}") # --- storage env_key --- methods.run_command(f"echo \"{keys}\" > {key_path}", callback=True) return dict(code=0, data=keys) @classmethod def verify_key(cls, **params): """ 验证key """ # --- check --- if not methods.is_file('/home/server/key'): return dict(code=1, is_verified=False) # --- get key --- keys = methods.read_text('/home/server/key') keys = methods.b64_to_text(keys) # --- check again --- if not keys: return dict(code=2, is_verified=False) if len(keys.split('|')) != 2: return dict(code=3, is_verified=False) serial_1, _ = keys.split('|') # --- check again --- ssh = Global.SSHClient('172.18.0.1', 22, 'server', 'server') serial_2 = ssh.run_command("cat /sys/firmware/devicetree/base/serial-number").strip('\x00') if serial_1 != serial_2: return dict(code=4, is_verified=False) return dict(code=0, is_verified=True)