SSL 非常复杂,因此您将需要使用库。
有几个选项,例如Keyczar、Botan、cryptlib等。这些库中的每一个(或其他人建议的库,例如 Boost.Asio 或 OpenSSL)都将具有示例代码。
回答您的第二个问题(如何将库集成到现有代码中而不会造成太多痛苦):这将取决于您当前的代码。如果您已经拥有调用 Winsock 或套接字方法来发送/接收等int
的简单函数,strings
那么您只需要重写这些函数的内容即可。当然,首先要更改设置套接字的代码。
另一方面,如果您直接调用 Winsock/socket 函数,那么您可能希望编写具有相似语义但发送加密数据的函数,并用这些函数替换您的 Winsock 调用。
但是,您可能需要考虑切换到Google Protocol Buffers或Apache Thrift(又名 Facebook Thrift)之类的东西。谷歌的协议缓冲区文档说:“在协议缓冲区之前,有一种请求和响应的格式,它使用请求和响应的手动编组/解组,并且支持许多版本的协议。这导致了一些非常丑陋的代码。 ……”
您目前处于手动编组/解组阶段。它可以工作,事实上我从事的一个项目确实使用了这种方法。但是把它留给图书馆要好得多。尤其是一个已经考虑过将来更新软件的库。
如果你走这条路,你将使用 SSL 库设置网络连接,然后将 Thrift/Protocol Buffer 数据推送到这些连接上。就是这样。它确实涉及大量重构,但最终需要维护的代码更少。当我们在我提到的那个项目的代码库中引入协议缓冲区时,我们能够摆脱大约 300 行编组/解组代码。