
在日常开发或自动化测试中,我们经常需要在代码中硬编码一些 URL 地址(如数据接口、测试节点等)。如果直接以明文形式写在源码或公共文章中,容易触发平台的敏感词拦截或被爬虫恶意抓取。
今天分享一个简单好用的 Python 字符串隐蔽与混淆小技巧,教大家如何通过 Base64 + XOR 异或混淆,优雅地保护你的测试链接。
import base64def xor_transform(data: str, key: int = 0x5A) -> str:"""使用指定密钥对字符串进行异或加解密并转为 Base64"""# 将每个字符与 key 进行异或xored_bytes = bytes([ord(char) ^ key for char in data])# 转为 Base64 方便文本传输return base64.b64encode(xored_bytes).decode("utf-8")def xor_decrypt(encoded_str: str, key: int = 0x5A) -> str:"""解密还原"""xored_bytes = base64.b64decode(encoded_str)# 再次异或即可还原original_bytes = bytes([b ^ key for b in xored_bytes])return original_bytes.decode("utf-8")# 1. 混淆处理raw_url = "https://www.baidu.com"SECRET_KEY = 0x34 # 任意设置 0-255 之间的数字作为密钥encrypted_payload = xor_transform(raw_url, key=SECRET_KEY)print("加密后的密文:", encrypted_payload)# 2. 解密还原decrypted_url = xor_decrypt(encrypted_payload, key=SECRET_KEY)print("解密后的地址:", decrypted_url)
你可以将以下代码复制到任何 Python 3 环境(如电脑端的 PyCharm/VS Code、手机端的 Pydroid 3,或各类在线 Python 运行平台):
import base64# --------------------------------------------------# 1. 加密数据与解密密钥 (已被异或混淆)# --------------------------------------------------PAYLOAD = "XEBAREcOGxtXUFoaRVAaXlEbWF1CURpZB0E="KEY = 0x34def get_real_url(payload: str, key: int) -> str:"""XOR 异或解密算法"""raw_bytes = base64.b64decode(payload)original_bytes = bytes([b ^ key for b in raw_bytes])return original_bytes.decode("utf-8")# --------------------------------------------------# 2. 执行解密并输出# --------------------------------------------------url = get_real_url(PAYLOAD, KEY)print("=" * 50)# 在这里查看上面PAYLOAD的解密结果,只复制1-20行代码即可。print("【解密成功】:")print(url)print("=" * 50)# --------------------------------------------------# 3. 连通性测试 (网络环境支持 requests 时运行)# 在线运行删除后面代码,否则报错# --------------------------------------------------import requeststry:headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"}print("\n正在测试接口连通性...")response = requests.get(url, timeout=10, headers=headers)print(f"HTTP 状态码: {response.status_code}")if response.status_code == 200:print("\n[接口响应内容前 300 字符预览]:")print(response.text[:300])else:print("\n[警告]: 接口当前返回状态异常")except Exception as e:print(f"\n[提示]: 未执行网络请求或环境缺少 requests 库")
看完记得点个👍
往期文章: