openssl加密通信客户端代码
来源:互联网 发布:java获取局域网所有ip 编辑:程序博客网 时间:2024/06/06 00:54
#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;}
阅读全文
0 0
- openssl加密通信客户端代码
- openssl进行加密通信服务器端代码
- OpenSSL中服务端和客户端加密通信中密钥生成过程
- linux使用openssl对socket通信加密
- 安全通信系统--OpenSSL服务器和客户端
- 安全通信系统--OpenSSL服务器和客户端
- android客户端加密代码
- android客户端加密代码
- 客户端服务器加密通信(1):AES加密
- 一次加密通信和SSL通信,openssl自建CA
- openSSL AES 加密引擎代码分析
- openssl 加密文件的完整实现代码
- openSSL AES 加密引擎代码分析
- OpenSSL 加密文件的完整实现代码
- openssl 加密文件的完整实现代码
- Cocos2d-x客户端代码加密
- linux下使用openssl对socket通信加密
- linux下使用openssl对socket通信加密
- spring mvc 过滤静态资源的配置
- Java程序利用main函数中args参数实现参数的传递
- WEB密码安全输入控件
- PLSQL Developer远程连接oracle数据库说明
- CodeVS 2928 你缺什么 题解
- openssl加密通信客户端代码
- Python-字符串
- c语言中的#ifndef、#def、#endif等宏是什么意思
- Drools入门-----------环境搭建,分析Helloworld
- drools入门(二)-----规则引擎Drools解决汽水问题
- ButterKnife源码阅读
- 关于php基础类型的一些探讨
- Java规则引擎与其API(JSR-94)
- 原型与继承