4

基本上我的问题与此完全相同:

简单的客户端/服务器、TCP/IP 加密消息流、SSL

不同之处在于我需要它用于纯 C++,而不是 .NET。我不能使用 3rd 方库,所以除非它是 Windows 系统组件(如上),否则我需要一些有源代码的东西,这样我才能得到通用的想法并自己构建它。

谢谢 :)

引用另一个问题以供参考:

“编写一个小的 TCP/IP 客户端服务器应用程序。基本上它会创建一个服务器,然后您可以创建几个不同的客户端并设置一些聊天会话。我想知道有什么方法可以合并,使用标准 .网络库某种形式的加密?

m_mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

有没有使用 rsa 指定 tcp 的方法?

或者您(我就是)是否必须编写一些自定义库来进行密钥交换,然后加密随后的聊天消息?我以前为 uni 做过,但那是在 java 中,但我知道转换它们并不难。只是试图不必重新发明轮子......

或者使用 ssl 怎么样?

谢谢,罗恩。”

4

3 回答 3

2

您是否考虑过使用 ASIO 库?think-async dot com/Asio/

有一个专门针对基于 SSL 的客户端/服务器的示例。http://think-async.com/Asio/asio-1.4.1/doc/asio/examples.html#asio.examples.ssl

它就像你可以得到的“纯c++”。

于 2009-08-22T02:34:25.377 回答
1

您总是可以查看开源的OpenSSL ,但这就像您自己实现 SSL。我建议包装 OpenSSL 并使用它。或者使用 OpenSSL 中可用的 SSL 隧道应用程序。

于 2009-08-21T16:55:45.757 回答
0

“不推荐”编写自己的加密代码。使用其中一个库时很容易犯一个简单的错误,更不用说尝试自己编写一个库了。

你真正想要使用的是 OpenSSL,上面有 Boost.ASIO。如果您不能这样做,那么您的下一个最佳选择是使用 Internet Explorer COM 对象。这不是很灵活,但根据您的确切需求可能会很好。您还可以探索 Win32 API。最后我发现没有足够的加密 API 广泛可用来执行此操作。处理此问题的最后一种方法是包装 .NET API,以便您可以从本机 C++ 中使用它们。

只有当这些都不适合你时,你才应该考虑自己写这个。你会犯错误,结果你的应用程序会变得不那么安全。因此,在您开始尝试编写自己的加密代码之前,您还可以尝试查看通过 SSH 的 SOCKS 隧道并使用其他人的 SSH 实现。我接下来要看的是购买代码而不是自己编写代码。该代码不会像开源​​产品那样好,因为它使用较少,因此会有更多的安全问题,但它仍然比您在第一次外出时编写的任何东西都要好。

只有当你用尽了所有这些选项时,你才应该考虑自己写这篇文章。一旦你考虑过,你应该再次尝试所有其他选项,以确保你不会错过让其中一个第一次为你工作的机会。

如果您仍然编写自己的实现,那么在将其投入生产使用之前将其丢弃并使用其他选项之一,因为会有一些错误会损害安全性,以至于您可能不会打扰。

很抱歉对所有这些都轻描淡写,但是把这些事情做好真的很难,而且不是你可以通过快速查看其他人的实现来做到的事情。

于 2009-08-22T02:53:11.430 回答