python-3.x - 如何散列密码以用于 HttpNtlmAuth
问题描述
我可以使用带有明文用户名和密码的 HttpNtlmAuth 请求访问我组织内的 Web 应用程序,但我不想将密码以明文形式存储在我的代码中。我已阅读以下其他 SO 答案,您可以传递密码的哈希值而不是明文,但我不知道该怎么做:
我已尝试根据此链接使用 MD4/UTF-16 ,也根据此链接尝试了 MD5,但两者都返回了 401(未经授权)响应。以下代码使用我的明文密码返回 200 响应(成功)。
我使用了错误的哈希算法,还是我错过了其他基本的东西?
import hashlib
import requests
from requests_ntlm import HttpNtlmAuth
# these are not the actual values
USERNAME = 'domain\\username'
PASSWORD = 'password'
URL = 'https://internal_web_app/url.aspx?Parameters=values'
hashes = [
PASSWORD, # No hash
hashlib.new('md4', PASSWORD.encode('utf-16le')).hexdigest(), # NTLM
hashlib.md5(PASSWORD.encode('utf-8')).hexdigest() # MD5
]
for hash in hashes:
# create a session
session = requests.Session()
# set up the authentication object with the respective string
session.auth = HttpNtlmAuth(USERNAME, hash)
# send a GET request (verify=False because the SSL cert is crappy)
response = session.get(URL, verify=False)
# expecting 200 for success and 401 for authentication failure
print(response.status_code)
输出:
200
401
401
解决方案
我的目标是避免将密码存储在笔记本中。我意识到一种解决方法是让用户在运行脚本时输入密码,使用
import getpass
password = getpass.getpass()
我已经解决了我的直接问题,但我仍然对散列感到好奇(如果可能的话,让这个脚本在无人值守的情况下运行)所以如果有人确实解决了这个问题,请提交回复。
推荐阅读
- xml - 使用 Java 将此 xml 文件解析为指定 JSON 的最简单方法是什么?
- flutter - 无法在 Android Studio 中获取或升级 Flutter 的依赖项
- flutter - 颤动 youtube 错误域:ios 上的 XCDYouTubeVideoErrorDomain
- python - 如何使用 re.sub 根据模式字典和 python 中的替换值替换文本的某些部分?
- html - 图像与内容重叠在容器顶部
- python - 在 Python3 中读取压缩 excel 时的 unknown_codepage_21010
- corda - 反序列化错误:无法构造 Dto 的实例(尽管至少存在一个 Creator):无法从 Object 值反序列化
- vue.js - 增加折线图和图例 ChartJS 之间的差距
- javascript - 如何在innerHTML中插入子元素
- html - 如何在 Angular 应用程序中播放视频?我的代码不起作用