我想讨论有关openssl写入和读方法的讨论。
假设我具有以下数据结构:

/-----------------------------------------------------\
|  my_header   |  PAYLOAD                             |
\-----------------------------------------------------/
       |                              |
      \ /                            \ /
 not encrypted                      encrypted

I think the proper algorithm would be like this :
   SEND:
   build my_header with my own header.
   encrypt PAYLOAD with encryption function
   attach my_header and PAYLOAD (encrypted) to one buffer
   send it using common POSIX function just like send or sendto
   RECV:
   using common POSIX function just like recv or recvfrom.
   extract my_header and PAYLOAD(encrypted)
   decrypt PAYLOAD with decryption function
   at last i got my_header and PAYLOAD(decrypted).

如果您面临上述问题,您的方法将如何。由于OpenSSL加密发送到SSL_WRITE函数(CMIIW)的所有数据。

谢谢。

也许,一个适当的问题是,可以在OpenSSL中加密/解密有效载荷的加密和解密函数?

没有正确的解决方案

其他提示

您实际上可以让OpenSSL为您做很多繁重的工作。

您可以像以前一样创建网络原始图,并将文件描述符与打开的SSL上下文相关联,该上下文将处理SSL握手,加密和解密。我正在浏览很多细节,但是在OpenSSL网站上以及本书中的示例代码:

http://www.amazon.com/network-security-openssl-john-viega/dp/059600270x

将非常有启发性。这本书也可以在线获得,但我相信您必须付费才能访问它。

在OpenSSL的发行版中,您可以找到许多示例代码,以说明如何执行此操作。

祝你好运。

OpenSSL带有一个libcrypto库,该库通常用于在SSL上下文之外执行独立加密。

http://www.openssl.org/docs/crypto/evp.html

另外,图书馆的生物部分可能更接近您想要的东西:http://www.openssl.org/docs/crypto/bio.html

但是,如果您真的打算通过网络发送此信息,那么我会质疑将标题未加密的安全性。加密不仅仅是隐私,还涉及确保数据未在运输中修改。如果有人可以监视您的流量,那么他们通常也可以篡改它。

如果您希望未注册的标题以便在Wireshark中阅读它进行调试,那么我建议您在应用程序中制定标志,以完全启用/禁用加密以在调试环境中使用。

如果您正在构建一个加密协议,那正是我的做法 my_header 包含足够的信息,没有任何本身需要确保安全的信息,例如会话密钥。低级别的网络数据包(请参阅tcpdump/libpcap)只是一个char*(“ string”),您可以通过沿着数组不同的长度移动来提取不同的标题 - 您建议的听起来像这样。

当您使用TLS/DTLS时,您可以选择:您将整个框架密封,或者根本没有。

如果您想在框架中有一些未移交的数据,那么您可能不需要TLS/DTL。但是,您可以使用OpenSL来计算标题的哈希(使用SHA或任何其他相关哈希算法),并在框架末端添加它以避免篡改。

对于框架的密码部分,您必须在Symetric和Ancymetric密码算法之间进行选择。但是,在不知道您想实现的目标的情况下,我无法为此提供真正的建议。

请记住,符号算法通常更快,但首先需要键交换即可。为此,您可能会使用不可分割的算法,但是然后,您正在重新发明TLS/DTLS;)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top