关于在ssl的第一次集训总结

第一周:

刚开始来的时候感觉还好,然后到了的时候发现我就是最菜的那个
一堆巨佬在我旁边,还有一个做了23道黑题的大大大大佬,居然是新初一的
不过这边伙食不错,中午那个面巨好吃,晚上还有宵夜,不过第二天就发烧回家了,
回来之后就一直补课,dfs做到死

第二周:

这个周就动态规划和做初赛的题,做到裂幵,不过也渐渐习惯了这样子,每天做做题就那么过去了,
然后就是24号的时候,老师叫hsh和wtj去倒垃圾,然后wtj跑了,只能我去,hsh把垃圾拖着,然后
我和他说可能会裂开,然后走到一半真就裂开了,hhhhhhhhh,当时笑死我了,之后我们俩拿扫把一直在扫地,居然扫了半个小时,笑死了,老师来讲课发现我们俩不在,叫海笑来叫我们,走的时候hsh说去洗个脚,然后走着走着进了女厕,笑死了,叫他出来还不出来真的笑死了,然后就回家了,就那么结束了
hhhhhhhhh第一次集训还挺有趣的

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
以下是一个使用C语言编写的基于SSL的简单客户端和服务器通信的例程: 服务器端代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <openssl/ssl.h> #include <openssl/err.h> #define CERT_FILE "/path/to/server.crt" // 服务器证书路径 #define KEY_FILE "/path/to/server.key" // 服务器私钥路径 #define PORT 1234 // 端口号 int main() { SSL_CTX *ctx = NULL; SSL *ssl = NULL; int sockfd, clientfd, len; struct sockaddr_in addr, client_addr; char buf[1024]; const SSL_METHOD *method; // 初始化SSLSSL_library_init(); // 创建SSL上下文 method = SSLv23_server_method(); ctx = SSL_CTX_new(method); if (ctx == NULL) { perror("SSL_CTX_new error"); return -1; } // 加载服务器证书和私钥 if (SSL_CTX_use_certificate_file(ctx, CERT_FILE, SSL_FILETYPE_PEM) <= 0) { perror("SSL_CTX_use_certificate_file error"); return -1; } if (SSL_CTX_use_PrivateKey_file(ctx, KEY_FILE, SSL_FILETYPE_PEM) <= 0) { perror("SSL_CTX_use_PrivateKey_file error"); return -1; } // 创建套接字 sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { perror("socket error"); return -1; } // 绑定地址和端口 memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(PORT); addr.sin_addr.s_addr = htonl(INADDR_ANY); if (bind(sockfd, (struct sockaddr *)&addr, sizeof(addr)) < 0) { perror("bind error"); return -1; } // 监听连接 if (listen(sockfd, 5) < 0) { perror("listen error"); return -1; } printf("server start listening on port %d...\n", PORT); while (1) { // 接受连接请求 len = sizeof(client_addr); clientfd = accept(sockfd, (struct sockaddr *)&client_addr, &len); if (clientfd < 0) { perror("accept error"); continue; } printf("client connected, IP: %s, port: %d\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port)); // 创建SSL握手对象 ssl = SSL_new(ctx); if (ssl == NULL) { perror("SSL_new error"); close(clientfd); continue; } // 将SSL握手对象与套接字关联 if (SSL_set_fd(ssl, clientfd) == 0) { perror("SSL_set_fd error"); SSL_free(ssl); close(clientfd); continue; } // 进行SSL握手 if (SSL_accept(ssl) <= 0) { perror("SSL_accept error"); SSL_free(ssl); close(clientfd); continue; } // 接收客户端数据 memset(buf, 0, sizeof(buf)); if (SSL_read(ssl, buf, sizeof(buf)) <= 0) { perror("SSL_read error"); SSL_free(ssl); close(clientfd); continue; } printf("received data from client: %s\n", buf); // 发送响应给客户端 if (SSL_write(ssl, "hello, client", strlen("hello, client")) <= 0) { perror("SSL_write error"); SSL_free(ssl); close(clientfd); continue; } // 关闭SSL会话 SSL_shutdown(ssl); SSL_free(ssl); close(clientfd); } // 关闭SSL上下文 SSL_CTX_free(ctx); return 0; } ``` 客户端代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <openssl/ssl.h> #include <openssl/err.h> #define CERT_FILE "/path/to/client.crt" // 客户端证书路径 #define KEY_FILE "/path/to/client.key" // 客户端私钥路径 #define SERVER_IP "127.0.0.1" // 服务器IP #define PORT 1234 // 端口号 int main() { SSL_CTX *ctx = NULL; SSL *ssl = NULL; int sockfd, len; struct sockaddr_in addr; char buf[1024]; const SSL_METHOD *method; // 初始化SSLSSL_library_init(); // 创建SSL上下文 method = SSLv23_client_method(); ctx = SSL_CTX_new(method); if (ctx == NULL) { perror("SSL_CTX_new error"); return -1; } // 加载客户端证书和私钥 if (SSL_CTX_use_certificate_file(ctx, CERT_FILE, SSL_FILETYPE_PEM) <= 0) { perror("SSL_CTX_use_certificate_file error"); return -1; } if (SSL_CTX_use_PrivateKey_file(ctx, KEY_FILE, SSL_FILETYPE_PEM) <= 0) { perror("SSL_CTX_use_PrivateKey_file error"); return -1; } // 创建套接字 sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { perror("socket error"); return -1; } // 连接服务器 memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(PORT); addr.sin_addr.s_addr = inet_addr(SERVER_IP); if (connect(sockfd, (struct sockaddr *)&addr, sizeof(addr)) < 0) { perror("connect error"); return -1; } printf("connected to server %s:%d\n", SERVER_IP, PORT); // 创建SSL握手对象 ssl = SSL_new(ctx); if (ssl == NULL) { perror("SSL_new error"); close(sockfd); return -1; } // 将SSL握手对象与套接字关联 if (SSL_set_fd(ssl, sockfd) == 0) { perror("SSL_set_fd error"); SSL_free(ssl); close(sockfd); return -1; } // 进行SSL握手 if (SSL_connect(ssl) <= 0) { perror("SSL_connect error"); SSL_free(ssl); close(sockfd); return -1; } // 发送数据给服务器 if (SSL_write(ssl, "hello, server", strlen("hello, server")) <= 0) { perror("SSL_write error"); SSL_free(ssl); close(sockfd); return -1; } // 接收服务器响应 memset(buf, 0, sizeof(buf)); if (SSL_read(ssl, buf, sizeof(buf)) <= 0) { perror("SSL_read error"); SSL_free(ssl); close(sockfd); return -1; } printf("received data from server: %s\n", buf); // 关闭SSL会话 SSL_shutdown(ssl); SSL_free(ssl); // 关闭套接字 close(sockfd); // 关闭SSL上下文 SSL_CTX_free(ctx); return 0; } ``` 需要注意的是,以上代码只是一个简单的例程,实际应用中需要根据具体需求进行更详细的配置和优化。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值