openssl加密通信客户端代码
2017-07-06 16:08
197 查看
#include <stdio.h> #include <string.h> #include <sys/socket.h> #include <resolv.h> #include <stdlib.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> //openssl头文件 #include <openssl/ssl.h> #include <openssl/err.h> int main(int argc, char *argv[]) { int sock_fd=-1; /* TCP套接字 */ SSL_CTX *ctx=NULL; /* SSL会话环境 */ SSL *ssl=NULL; /* SSL安全套接字 */ struct sockaddr_in ser_addr; /* 服务器地址 */ bzero(&ser_addr, sizeof(ser_addr)); if( argc!=4 ) { printf("argcment wrong:ip port content\n"); exit(0); } do { /* 申请SSL会话环境 */ if( NULL==(ctx=SSL_CTX_new(TLS_client_method())) ) //使用SSL_CTX_new()创建会话环境,建立连接时要使用协议由TLS_client_method()来定,服务器由对应的TLS_server_method()来定。如果这一步出错,需要查看错误栈来查看原因 { ERR_print_errors_fp(stdout); break; } /* TCP连接 */ if( -1==(sock_fd=socket(AF_INET, SOCK_STREAM, 0)) ) { printf("creat socket wrong\n"); break; } ser_addr.sin_family = AF_INET; ser_addr.sin_port = htons(atoi(argv[2])); ser_addr.sin_addr.s_addr = inet_addr(argv[1]); if( -1==(connect(sock_fd, (struct sockaddr *)&ser_addr, sizeof(ser_addr))) ) { printf("connect wrong\n"); break; } /* SSL连接 */ ssl=SSL_new(ctx); /* 由会话环境申请一个SSL套接字 */ SSL_set_fd(ssl, sock_fd); /* 绑定SSL安全套接字和已连接TCP套接字 */ if( 0>=SSL_connect(ssl) ) /* 安全套接层握手 */ //返回值为1,成功建立连接;小于等于零失败,使用SSL_get_error()找出错误原因 { ERR_print_errors_fp(stderr); break; } /* 发送数据 */ SSL_write(ssl, argv[3], strlen(argv[3])); //返回值大于零,发送成功,此时返回值等于第3个参数;小于等于零,发送失败,可能原因是连接断开或者出现错误,使用SSL_get_error()获取错误原因 }while(0); /* 关闭SSL连接,释放SSL安全套接字资源 */ if( NULL!=ssl ) { SSL_shutdown(ssl); //关闭一个活的TLS/SSL连接,会向对端发送"close notify",告诉对方 SSL_free(ssl); //减少ssl的引用次数,如果引用次数为零,就移除ssl指向的对象、释放分配的内存;如果ssl是NULL,什么都不做 ssl=NULL; } /* 关闭TCP连接 */ if( -1!=sock_fd) { close(sock_fd); sock_fd=-1; } /* 释放SSL会话环境 */ if( NULL!=ctx ) { SSL_CTX_free(ctx);//减少ctx的引用次数,如果引用次数为零,就移除ctx指向的对象、释放分配的内存;如果ctx是NULL,什么都不做 ctx=NULL; } return 0; }
相关文章推荐
- OpenSSL中服务端和客户端加密通信中密钥生成过程
- openssl进行加密通信服务器端代码
- 常见密码算法总结--(3)加密模式的openssl代码分析之cbc模式
- string转Unicode的java和javascript代码(客户端到服务器之间的密码加密的过程)
- 安全通信系统--OpenSSL服务器和客户端
- java写的Socket客户端和服务端通信,经验证可以执行的代码,并添加了很多注释
- Spice工作原理及代码剖析:03 Channel:客户端与服务器通信机制.docx
- QQ空间登录表单密码客户端加密代码
- java项目-----客户端与客户端通信--实现群聊功能的代码
- 安全通信系统--OpenSSL服务器和客户端
- 在客户端脚本与服务器代码之间通信
- C# socket 服务端与客户端通信演示代码
- 常见密码算法总结--(4)加密模式的openssl代码分析之cfb模式
- 模拟jQuery ajax服务器端与客户端通信的代码
- [原]安全通信系统--OpenSSL服务器和客户端
- 如何:在 DHTML 代码和客户端应用程序代码之间实现双向通信
- 如何:在 DHTML 代码和客户端应用程序代码之间实现双向通信
- C# Socket通信 客户端 服务器端代码
- android客户端加密代码