from fido2.utils import websafe_encode, websafe_decode def convert_bytes_to_base64(obj): """ 递归将 dict/list 中的 bytes 转为 base64url """ if isinstance(obj, dict): return { k: convert_bytes_to_base64(v) for k, v in obj.items() } elif isinstance(obj, list): return [convert_bytes_to_base64(i) for i in obj] elif isinstance(obj, bytes): return websafe_encode(obj).decode("ascii") else: return obj def convert_base64_to_bytes(obj): """ 递归将 dict/list 中的 base64url 转回 bytes """ if isinstance(obj, dict): return { k: convert_base64_to_bytes(v) for k, v in obj.items() } elif isinstance(obj, list): return [convert_base64_to_bytes(i) for i in obj] elif isinstance(obj, str): try: return websafe_decode(obj.encode("ascii")) except Exception: return obj else: return obj