c# - 从摘要访问身份验证中导入登录名和密码

标签 c#

我想从此文本中获取登录名和密码,但密码可能是加密的 MD5?

这个文本“字符串”:

username="Domain\ik_r.test",realm="Digest",nonce="+Upgraded+v16223a53d44f99beb7dfaf10bf5738392669956ca1a21d101e949e262b02c7a7e268e9699b5824cd55c05d7bb900059b7b8985caa00174ace",uri="/Service1.svc",cnonce="+Upgraded+v1e077752581e4417aaefb76c90bca4fef0d9e033d4cb882c74cc04f2e95704b31",nc=00000001,algorithm=MD5-sess,response="6acc0f7e891fe4daa4174da35f098764",qop="auth",charset=utf-8,hashed-dirs="service-name,channel-binding",service-name="HTTP/test.eu",channel-binding="05439c3422ef9779e232067358231137"

结果:

string login = "Domain\\ik_r.test";
string password = ?;

例子: https://en.wikipedia.org/wiki/Digest_access_authentication

最佳答案

正如您在问题中所链接的那样,那是 HTTP digest authentication .响应值由 MD5 散列的 MD5 散列构成;在你的情况下(MD5-sess,auth)

  • “user:realm:password”的散列,然后与请求中的两个随机数字符串一起输入第二个散列
  • 从 HTTP 请求行构造的散列
  • 最后,对由随机数字符串之一分隔的这两个哈希输出再次进行哈希处理以构建响应。

从响应散列中恢复密码的唯一方法是对每个可能的密码重复该过程,直到找到匹配的密码;因为请求是恒定的,所以每个候选密码是三个 MD5 哈希值。实际执行起来可能计算量太大。

如果您真的需要这个密码,并且不能更改帐户密码或询问知道的人,您最好的办法是尝试从服务器恢复它:最坏的情况是,服务器需要有存储的“user:realm:password”的第一个散列,它只是一个用于暴力破解的散列,以从中恢复密码。如果幸运的话,服务器将拥有明文密码,以便它可以为任意领域字符串构造此哈希。

最后,如果您的用户有一个“域”部分,这可能是一个 Windows 帐户?有一些工具可以帮助您恢复或重置 Windows 帐户密码,但我不知道它们是否需要域管理员访问权限,因此不推荐使用。

关于c# - 从摘要访问身份验证中导入登录名和密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33753790/

相关文章:

c# - 删除 GDI+ 对象

c# - 在测试执行期间确定解决方案路径

C# 自定义字典获取 - 从 IEnumerable 转换回来

c# - 如何在 C# 中将 JArray 转换为 KeyValuePair 结构?

c# - 如何将字符串 "1900-01-01 08:00:00.000"格式化为 HH :MM and add 30 minutes to it?

c# - DllImport 在搜索 DLL 时是否遵循 SafeDllSearchMode?

c# - 私有(private)关键字与无私有(private)关键字

c# - 如果使用继承,如何检查列表的类型

c# - 如何计算通过 3 个点的循环弧并在 3d 中将其参数化为 0..1

c# - 日期时间从 WebLogic SOAP 服务更改为 WCF 应用程序