1

我正在用 C++ 构建一个客户端/服务器应用程序,并且需要每个客户端提供一个密码。显然我希望这在传输过程中是安全的,所以我一直在寻找一种加密密码的方法;这样只有服务器应用程序才能再次解密它。

我遇到的问题不一定是让功能正常工作,而是了解我需要做什么才能将其与代码相关联。我正在尝试理解并阅读过 MSDN(感觉很喜欢),但我仍然只是在学习,所以真的需要一些清晰准确的指导来指导我的实现。

这听起来对吗?

  1. 我在服务器和客户端上都获得了 CSP 的上下文。
  2. 我在服务器上生成一个密钥,或者加载一个(无论如何)。

然后我

从服务器导出一个公钥并发送给客户端,客户端导入密钥然后加密密码并返回,这样只有服务器才能再次解密。(当我尝试时失败)。

或者,那我要不要

导出会话密钥,或使用交换密钥对加密的交换密钥对(单一公共)?

哦,我很迷茫,我什至无法解释清楚。

请帮助我理解这一点...

4

3 回答 3

1

不要做任何事。

这个非常重要。不要自己实施。
重复不做任何事情你会弄错的。

你应该使用已经可用的东西。只需打开与 SSL 套接字的连接,流的内容将在另一端自动加密和解密。

您的应用程序应该简单地采用用户名/密码元组并验证它们是否正确。不要尝试实现加密部分。

于 2011-05-06T08:01:10.110 回答
1

如果您不需要加密通信进行数据传输等其他事情,您可以使用Challenge-Response进行密码验证。密码不需要通过网络传输,并且没有重放攻击的风险,第三方只是重新发送一些数据包。不利的一面是,中间人(MITM)攻击是可能的。

如果您需要保护 MITM 或需要加密通道进行其他通信,您应该使用带有证书的 TLS 或带有两个密钥对的公钥加密。

于 2011-05-06T06:12:09.000 回答
1

这实际上取决于您想要基于哪种身份验证解决方案。选项多种多样。

例如,您可以依赖底层操作系统身份验证。您根本不需要管理密码。但这需要与运行应用程序的域进行更紧密的集成。

另一种选择是使用 HTTPS 和简单身份验证。它基本上使用 SSL 加密通信,然后发送用户名/密码对。非常简单,所有 Web 服务器都支持。如果您不想依赖已安装的 IIS 等现有 Web 服务器,您可能很容易找到为您处理此问题的 C++ 代码(搜索 StackOverflow 以获取此类问题)。

于 2011-05-06T03:24:57.740 回答