python - 如何修复python int太大而无法转换为c long
问题描述
我使用 Windows 10 为我忘记密码的 DVR 生成安全代码。
在我的笔记本上安装了 Python 3.7.2
内存:16GB 硬盘:1TB
#!/usr/bin/env python3
import sys
from re import search
from numpy import uint32
from requests import get
from datetime import datetime
def keygen(seed):
magic = 0
for i, char in enumerate(seed):
i += 1
magic += i * ord(char) ^ i
secret = str(uint32(1751873395 * magic))
c = str.maketrans("012345678", "QRSqrdeyz")
return secret.translate(c)
def get_serial_date(ip):
try:
req = get("http://192.168.178.43/upnpdevicedesc.xml")
except Exception as e:
print("Unable to connect to {ip}:\n{e}")
sys.exit(-1)
model = search("<modelNumber>(.*)</modelNumber>", req.text).group(1)
serial = search("<serialNumber>(.*)</serialNumber>", req.text).group(1)
serial = serial.replace(model, "")
datef = datetime.strptime(req.headers["Date"], "%a, %d %b %Y %H:%M:%S GMT")
date = datef.strftime("%Y%m%d")
return "{serial}{date}"
if __name__ == "__main__":
if len(sys.argv) < 2:
print("Usage: {sys.argv[0]} <ip>")
print("Connects to a device and generates a security key")
sys.exit(1)
seed = get_serial_date(sys.argv[1])
print("Got seed: {seed}")
key = keygen(seed)
print("Generated security key: {key}")
有没有办法修复这个错误代码或者我需要对我的笔记本设置做些什么?
这是我得到的错误代码
Got seed: {seed}
Traceback (most recent call last):
File "beer.py", line 41, in <module>
key = keygen(seed)
File "beer.py", line 14, in keygen
secret = str(uint32(1751873395 * magic))
OverflowError: Python int too large to convert to C long
解决方案
如果您使用uint32
将数字减少到 range 0 … 2**32-1
,您可以使用它来代替:
secret = str((1751873395 * magic) & 0xffffffff)
还要注意,在循环enumerate
中结合使用i += 1
是非常混乱的。
推荐阅读
- php - 无法将 cookie 数据加载到另一个页面
- ruby - GitLab CI 错误:MacOS 上的 gem install bundler
- kubernetes - 如何查看哪个节点/pod 为 Kubernetes Ingress 请求提供服务?
- google-workspace - gSuite 集成管理 SDK 报告 API 日期格式
- android - 如何在颤动中从UST获取当地时间
- javascript - 我的 javascript 片段返回“非法字符”
- tm - 如何清理 csv 文件的两列中的数据,其中包含许多行作为文档
- mongodb - 获取“org.springframework.data.mongodb.UncategorizedMongoDbException: 'can't convert from BSON type string to Date'”异常
- google-cloud-platform - 无法将静态 IP 连接到 GKE 上的 Ingress
- c# - 创建后我的 TextBlock 有多宽?