gpt4 book ai didi

c - OpenSSL:在没有 SSL_read()/SSL_write() 的情况下执行加密/解密

转载 作者:太空狗 更新时间:2023-10-29 14:55:23 28 4
gpt4 key购买 nike

我已经用 C 编写了一个基于事件的网络库,现在我想通过 OpenSSL 添加 SSL/TLS 支持。而不是使用 SSL_read()SSL_write(),我宁愿让 OpenSSL 只执行传出/传入数据的加密/解密,让我传输/接收我自己的数据。

我是 SSL/TLS 和 OpenSSL 的新手,所以:

有没有办法让 OpenSSL 执行char 数组的加密/解密?

size_t SSL_encrypt(const char *buf_in, size_t size_in, char *buf_out) 这样的东西会很棒。

最佳答案

您所要求的是不可能的,因为使用 TLS,在应用层发送内容和在网络套接字上发送内容之间没有一对一的对应关系。重新协商等事件意味着有时 SSL 需要从网络读取数据才能在发送数据方面取得进展,反之亦然。

但是,您仍然可以使用 OpenSSL 来执行 SSL,但您自己负责从网络读取和写入。您可以通过在 SSL 指针上调用 SSL_set_bio() 而不是 SSL_set_fd() 来执行此操作:

  1. 使用 BIO_new_bio_pair()创建连接的 BIO 对。一个 BIO 将由 SSL 例程读取和写入,另一个 BIO 将由您的应用程序读取和写入(允许它以任何它想要的方法将数据传递到另一端)。

  2. 使用 SSL_set_bio()在新的 SSL 对象上将读取和写入 BIO 设置为生成的 BIO 对中的一个。

  3. 在对中的另一个 BIO 上使用 BIO_read()BIO_write() 来读写 SSL 协议(protocol)数据。

    <
  4. 使用 SSL_accept()SSL_connect()SSL_read()SSL_write()在 SSL 对象上正常。

(虽然不清楚这会给您的应用程序带来什么优势:在这种情况下,除了准确地读取和写入 OpenSSL 传递给您的内容外,您实际上无法做任何其他事情,因此您不妨让它进行读取和写入操作也写)。

关于c - OpenSSL:在没有 SSL_read()/SSL_write() 的情况下执行加密/解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9030661/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com