Python解密后如何从utf-8解码字符串中提取ip、用户名及密码参数
提取方案
方案1:直接适配现有输出格式
你当前的输出字符串是固定的key = "value"格式用逗号分隔的结构,可以用正则表达式直接匹配提取:
import re # 你的现有代码 decrypted_message = encryption_type.decrypt(original) testing = decrypted_message.decode("utf-8") # 提取逻辑 pattern = r'ip = "([^"]+)", username = "([^"]+)", password = "([^"]+)"' match = re.match(pattern, testing) if match: ip = match.group(1) username = match.group(2) password = match.group(3) # 后续直接使用三个变量即可
如果格式可能存在空格差异,可以调整正则适配,比如把固定空格换成\s*匹配任意数量空白字符。
方案2:修改输出格式(更推荐,稳定性更高)
建议你加密存储前直接把登录信息序列化为JSON字符串,解密后可以直接反序列化得到字典,不需要写复杂的匹配逻辑,容错性更强:
- 加密前的处理逻辑示例:
import json # 原始信息 login_info = { "ip": "192.168.xxx.xxx", "username": "xxx", "password": "xxx" } # 转成JSON字符串再编码为bytes用于加密 info_bytes = json.dumps(login_info).encode("utf-8") # 后续对info_bytes执行加密存储即可
- 解密后的提取逻辑:
import json decrypted_message = encryption_type.decrypt(original) # 直接反序列化得到字典 login_info = json.loads(decrypted_message) ip = login_info["ip"] username = login_info["username"] password = login_info["password"]
bytes类型操作说明
你当前的decode("utf-8")操作是完全正确的常规处理逻辑:
decrypted_message是bytes类型,存储的是二进制编码的文本内容,输出带的b'前缀是Python的类型标识,不是内容本身的一部分- 如果你不想先解码也可以直接操作,比如正则匹配可以用
rb'ip = "([^"]+)"'格式的bytes类型正则,但是先解码为字符串再处理可读性和可维护性更高,更推荐。
内容的提问来源于stack exchange,提问作者Bowen
相关产品推荐
相关产品推荐

