摘要计算器
本文介绍了一种在 C# 中实现摘要协议的简单方法。提供了一个示例应用程序,其中逐步展示了摘要计算。
引言
本文介绍了一种在 C# 中实现摘要协议的简单方法。提供了一个示例应用程序,其中展示了如何逐步计算它。
背景
在 HTTP 协议的身份验证中,我们使用不同类型的协议:基本、摘要和 Kerberos。
1. 基本身份验证
这是最不安全的,因为它使用明文传输 userid 和密码到服务器。
2. 摘要身份验证
此方法在一定程度上提供了安全性。密码不是由客户端传递的,而是服务器和客户端使用定义的算法对密码进行哈希处理,生成一个 32 位密钥。通信是属性值字符串,并且很多参数是可选的。因此,它容易受到可以破解字符串并使用基本身份验证更改它,或者删除某些摘要可选值的中级黑客的攻击。
3. Kerberos
这被认为是最安全的方法之一。身份验证不是一步或两步完成的。挑战和响应是一个包含每个阶段票证的几个步骤的过程。如果通信因某种原因中断,则必须从第一阶段开始。因此,漏洞较少。但这个过程很长。
在本文中,我们讨论摘要协议以及如何使用 .NET Framework 3.5 实现它。
Application
这里我们只讨论服务器端协议处理。首先,服务器发送带有以下参数的请求。
Realm=Name of the realm
Nonce=Generated every time a 32 bit hexadecimal representation of character
Stale=true/false (is it repeated call or 1st time call)
Algorithm=MD5
QOP=auth (another method is auth-integer)
Example
RealM=”Test”,Nonce=”ed5e5b69e46f3adc79316c573cb008cb”,State=”false”, Algorithm=”MD5”,
QOP=”Auth”
客户端接收信息,并提示用户输入 userid 和密码。用户将给出他/她的用户 ID 和密码。然后用户将按下登录。当用户按下登录时,应用程序将使用给定的和一些额外的参数进行哈希处理。它会将哈希信息和参数发送回服务器。
密码不会由客户端发送回服务器,而是使用给定的参数和生成的参数对密码进行 MD5 哈希处理。现在服务器必须使用客户端发送的数据。除此之外,我们必须从 SQL 数据库中获取 userid 的密码。使用 userid 从数据库获取密码非常简单。方法名称是特定于实现的,在我的例子中是“DESCRIBE
”。
现在您拥有客户端提供的参数,包括 userid,并且我们从数据库中检索了密码。现在我们必须应用该算法。
步骤 1
分离客户端发送的参数并将其存储到命名变量中。在示例中,我们正在使用
private void SplitResponse(String strResponse, out String strUserName,
out String StrSplResponse, out String strRealm,out String strURI,
out String strNonce, out String strCnonce, out String strNonceCount,
out String strQop
第二步
具有遵循 MD5 哈希处理的哈希函数
private String GetHash(String strIn)
步骤 3
现在我们进行算法实现。逐个格式化字符串。
获取 A1
UserName + “:” + Realm + “:” + Password
A1Hash = Hash the A1 value
获取 A2
CommandName + “:” + URI
A2Hash = A2 MD5 has it.
现在计算响应
A1Hash + “:” + CNonce + “:” + NonceCount + “:” + QOP + “:” + A2Hash
现在哈希处理此响应值并与客户端返回的响应进行检查,它应该相等,这意味着用户已输入正确的密码,我们可以允许令牌。否则身份验证将被拒绝。
客户端发送的示例数据
username="test",realm="Test",nonce="ed5e5b69e46f3adc79316c573cb008cb",
uri="https:///test",cnonce="551b92b5cf688f737d655c8fa506364a",
nc=00000001,response="47aa3643329845a954a2d091422eb35f",qop="auth"
服务器代码将检索(使用 SQL Server / 任何数据库)
- 密码:testpass
- 方法:DESCRIBE
结果响应必须等于“47aa3643329845a954a2d091422eb35f”。
我附上了一个示例程序,演示了如何实现 MD5 哈希处理和摘要身份验证。
计算
当您想在另一种语言或其他技术中实现它时,可以将示例解决方案用作示例计算器。我们可以使用本文作为逐步检查工具。
历史
- 2008 年 10 月 24 日:首次发布