代码之家  ›  专栏  ›  技术社区  ›  deddihp

openssl加密

  •  2
  • deddihp  · 技术社区  · 16 年前

    我想讨论一下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 function(CMIIW)的所有数据进行加密。

    谢谢

    也许,一个恰当的问题是,在openssl中,可以用来加密/解密有效负载的加密和解密函数是什么?。

    4 回复  |  直到 16 年前
        1
  •  2
  •   Doug    16 年前

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

    您可以像以前一样创建网络原语,并将文件描述符与开放的SSL上下文相关联,后者将处理SSL握手、加密和解密。我忽略了很多细节,但是openssl网站和本书中的示例代码:

    http://www.amazon.com/Network-Security-OpenSSL-John-Viega/dp/059600270X

    会很有启发性。这本书也可以在网上买到,但我相信你必须付费才能阅读。

    在OpenSSL的发行版中,您可以找到许多示例代码,详细说明如何做到这一点。

    祝你好运

        2
  •  2
  •   NUXI    16 年前

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

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

    或者,图书馆的生物部分可能更接近你想要的: http://www.openssl.org/docs/crypto/bio.html

    但是,如果你真的打算通过网络发送,那么我会质疑不加密头的安全性。加密不仅仅关乎隐私,还关乎确保数据在传输过程中未被修改。如果有人可以监控你的流量,那么他们通常也可以篡改流量。

    如果您希望标题不加密,以便可以在wireshark中读取以进行调试,那么我建议在应用程序中设置一个标志,以便在调试环境中完全启用/禁用加密。

        3
  •  0
  •   user257111 user257111    16 年前

    如果你在建立一个加密协议,假设 my_header 包含足够的信息,并且本身不需要保持安全,例如会话密钥。低级别的网络数据包(请参阅tcpdump/libpcap)只是一个字符*(“字符串”),您可以通过沿数组移动不同的长度来提取不同的头文件——您的建议听起来就像这样。

        4
  •  0
  •   ereOn    16 年前

    当您使用TLS/DTL时,您可以选择:加密整个帧,或者什么都不加密。

    如果希望在帧中包含一些未加密的数据,那么可能不需要TLS/DTL。但是,您可以使用OpenSSL计算头的散列(使用SHA或任何其他相关的散列算法),并将其添加到帧的末尾以避免篡改。

    对于帧的加密部分,必须在对称和非对称密码算法之间进行选择。但如果不知道你想要实现什么,我真的无法就此提供建议。

    请记住,对称算法通常更快,但首先需要交换密钥。要做到这一点,您可能需要使用一种不对称算法,但之后,您需要重新发明TLS/DTLS;)