• 大小: 5KB
    文件类型: .gz
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: 其他
  • 标签:

资源简介

自己写的openssl加密通信的代码模板

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
//openssl头文件
#include 
#include 

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;
}

评论

共有 条评论

相关资源