openssl GCM 加密 add 说明
时间: 2023-11-08 12:28:11 浏览: 260
OpenSSL库中的GCM加密模式是一种高效的加密算法,可以在保证信息安全的前提下,将加密过程大大简化。在使用GCM加密模式时,需要调用openssl库中提供的GCM加密函数,并设置相应的参数和密钥。其中,add参数是指要加密的明文数据,可以通过多次调用add函数来添加多个数据块;而最终加密出来的密文数据,则需通过调用finalize函数来完成。在使用openssl库进行GCM加密时,需要注意使用安全的随机数生成器,以增强加密的安全性。
相关问题
ssl通信中如何禁用TLS_RSA_WITH_AES_256_GCM_SHA384加密套件
在SSL通信中,如果你想禁用特定的加密套件如`TLS_RSA_WITH_AES_256_GCM_SHA384`,你需要在创建SSL上下文时手动排除它。这里是使用OpenSSL的一个例子:
```c
#include <openssl/ssl.h>
#include <openssl/err.h>
// 定义你要排除的加密套件ID
const uint16_t excluded_suite_id = SSL_TLS_RSA_WITH_AES_256_GCM_SHA384;
int main(int argc, char *argv[]) {
SSL_library_init();
OpenSSL_add_all_algorithms();
SSL_CTX *ctx = SSL_CTX_new(TLS_client_method());
// 指定一个只包含允许加密套件的列表
const SSL_CIPHER **cipher_list = malloc(sizeof(SSL_CIPHER *) * 2);
cipher_list[0] = SSLCipherSuiteForId(TLS_RSA_WITH_AES_128_CBC_SHA); // 例如这里替换为其他允许的套件
cipher_list[1] = NULL;
// 排除TLS_RSA_WITH_AES_256_GCM_SHA384
for (const SSL_CIPHER **it = cipher_list; *it != NULL; ++it) {
if (*it == SSL_CIPHER_get_id(TLS_RSA_WITH_AES_256_GCM_SHA384)) {
continue; // Skip the excluded suite
}
SSL_CTX_set_cipher_list(ctx, SSL_CIPHER_description(*it));
}
SSL_CTX_free(cipher_list); // 释放分配的内存
// 其他SSL初始化步骤...
SSL_CTX_free(ctx);
return 0;
}
使用C语言实现TLS1.3协议服务端选择双方都支持的加密套件用于传输数据
由于TLS1.3协议是基于加密套件的,因此在实现TLS1.3协议服务端时,需要选择双方都支持的加密套件用于传输数据。以下是一个使用C语言实现的示例代码:
```c
#include <openssl/ssl.h>
#include <openssl/err.h>
#include <openssl/conf.h>
int main()
{
SSL_CTX *ctx;
SSL *ssl;
int sock;
// 初始化OpenSSL库
SSL_library_init();
SSL_load_error_strings();
OpenSSL_add_all_algorithms();
OPENSSL_config(NULL);
// 创建SSL上下文
ctx = SSL_CTX_new(TLS_server_method());
// 设置支持的加密套件
SSL_CTX_set_cipher_list(ctx, "TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256");
// 加载证书和私钥
SSL_CTX_use_certificate_file(ctx, "server.crt", SSL_FILETYPE_PEM);
SSL_CTX_use_PrivateKey_file(ctx, "server.key", SSL_FILETYPE_PEM);
// 创建socket并监听
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
// 绑定socket
// 监听socket
// 接受连接请求
// 创建SSL对象
ssl = SSL_new(ctx);
// 将socket和SSL对象关联
SSL_set_fd(ssl, sock);
// SSL握手
SSL_accept(ssl);
// 发送和接收数据
// ...
// 关闭连接
SSL_shutdown(ssl);
SSL_free(ssl);
close(sock);
// 释放SSL上下文
SSL_CTX_free(ctx);
// 清除OpenSSL库
CONF_modules_unload(1);
EVP_cleanup();
ERR_free_strings();
return 0;
}
```
在上述代码中,通过调用`SSL_CTX_set_cipher_list`函数设置支持的加密套件为`TLS_AES_256_GCM_SHA384`和`TLS_AES_128_GCM_SHA256`,这两个加密套件都是TLS1.3协议支持的加密套件。在建立SSL连接时,双方会协商选择一个双方都支持的加密套件,用于传输数据。
阅读全文