当前位置:  技术问答>linux和unix

LINUX下的无线加密传输问题

    来源: 互联网  发布时间:2016-05-05

    本文导语:  以下是一段基于BLUEZ的蓝牙无线文件传输的程序和一个加密算法,如何才能实现两者的结合,实现文件的加密传输,望各位指点。 无线传输程序如下:: /***************************************************************************  ...

以下是一段基于BLUEZ的蓝牙无线文件传输的程序和一个加密算法,如何才能实现两者的结合,实现文件的加密传输,望各位指点。


无线传输程序如下::


/***************************************************************************
 *   Copyright (C) 2007 by tornado   *
 *   tor3769@163.com   *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   IET.IEU@ZZ.PLA                                                        *
 ***************************************************************************/




#ifdef HAVE_CONFIG_H
#include 
#endif

#include 
#include 

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define BACKLOG     2       /*最大同时连接请求数*/
#define PORT        1003    /* l2cap port */
#define MAXDATASIZE 600     /*每次最大数据传输量*/
#define BLKSIZE     512     /*文件读写数据块大小*/

int bReDir=1;

void usage(char *exename)
{
  printf("usage:"
         "nRun as BtServer:t%s -s"
         "nRun as BtClient:t%s -c remoteBtAddr filetosendn", exename, exename);
}

// btft -s
// btft -c 00:13:EF:F1:43:C8 a.txt

int main(int argc, char *argv[])
{
  int opt;
  if(argc4)
  {
    usage(argv[0]);
    return 1;
  }

  while ((opt=getopt(argc, argv, "SsC:c:")) != EOF)
  {
    switch(opt)
    {
    case 'S':
    case 's':
      if (argc==3 && strcmp(argv[2],"default")==0)
        bReDir=0;
      server();
      break;
    case 'C':
    case 'c':
      client(argv[2], argv[3]);
      break;
    default:
      usage(argv[0]);
      exit(1);
    }
  }

  return 0;
}

int client(char *destaddr, char *fileName)
{
  int sockfd,numbytes;
  char bufsnd[MAXDATASIZE];
  char bufrcv[MAXDATASIZE];
  char filebuf[BLKSIZE];
  char *file2send;
  char destBta[18]="00:13:EF:F1:43:C8";
  struct hostent *he;
  struct sockaddr_l2 their_addr = { 0 };
  int pktsnum=0, nread=0;

  if ( (sockfd = socket(AF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP)) == -1 )
  {
    perror("socket");
    exit(1);
  }

  FILE *infile=fopen(fileName, "rb");
  if (infile==NULL)
  {
    printf("Open File Error!n");
    exit(1);
  }
  while(!feof(infile))
  {
    nread = fread(filebuf, sizeof(char), BLKSIZE, infile);
    pktsnum++;
  }
  rewind(infile);

  printf("Connectting to [ %s ] ...", destBta);

  // set the connection parameters (who to connect to)
  their_addr.l2_family = AF_BLUETOOTH;
  their_addr.l2_psm = htobs(PORT);
  memcpy(destBta, destaddr, 18);
  str2ba( destBta, &their_addr.l2_bdaddr );

  /* 建立连接 */
  if ( connect( sockfd, (struct sockaddr *)&their_addr,
                sizeof(their_addr) ) == -1 )
  {
    perror("connect");
    exit(1);
  }
  printf("OKn");

  printf("Transfering [ %s ] ...n", fileName);
  /* 发送文件名和长度 */
  file2send=strrchr(fileName, '/')+1;
  file2send = (file2send==(char *)1) ? fileName : file2send;
  sprintf(bufsnd, "%s %d ", file2send, pktsnum);

  if ( -1 == write(sockfd, bufsnd, strlen(bufsnd)) )
  {
    perror("write0");
    close(sockfd);
    exit(1);
  }
  /* 接收响应 */
  memset(bufrcv, 0, MAXDATASIZE);
  if ( (numbytes = read(sockfd, bufrcv, MAXDATASIZE)) == -1 )
  {
    perror("read");
    exit(1);
  }

  if(strncmp(bufrcv,"ack",3)!=0)
  {
    printf("Server response error!n");
    exit(1);
  }

  pktsnum=0;
  while(!feof(infile))
  {
    memset(bufsnd, 0, MAXDATASIZE);
    memset(bufrcv, 0, MAXDATASIZE);
    memset(filebuf, 0, BLKSIZE);

    nread = fread(filebuf, sizeof(char), BLKSIZE, infile);

    sprintf(bufsnd, "%09d %09d ", pktsnum, nread);
    memcpy(bufsnd+20, filebuf, nread);

    if ( -1 == write(sockfd, bufsnd, 20+nread) )
    {
      perror("write1");
      exit(1);
    }

    if ( (numbytes = read(sockfd, bufrcv, MAXDATASIZE)) == -1 )
    {
      perror("read");
      exit(1);
    }
    sprintf(bufsnd, "%09d:%09dack", pktsnum++, nread);

    if(strncmp(bufrcv,bufsnd,22) != 0)
    {
      printf("Server response error!n");
      exit(1);
    }
  }
  printf("File transfered successfully!n");
  close(sockfd);
  fclose(infile);

  return 0;
}


|
这个应该不难,自己看看代码。
bool Des_Go(char *Out, char *In, long datalen, const char *Key, int keylen, bool Type) 
out 输出数据
in 输入数据
datalen 数据长度
Key 加密密钥
keylen 密钥长度
Type 是加密还是解密

在你传输文件数据也就是write的时候调用这个函数type为加密,数据全接受好了,调用这个函数type为解密。
key你自己设置,不过要保证传输两端的密钥相同,可以设置成默认的,或者做成配置文件。
说白了应该是char bufrcv[MAXDATASIZE]; 
           char bufsnd[MAXDATASIZE]; 
这两个数组。接受bufrcv后调用解密,发送bufsnd前加密

    
 
 

您可能感兴趣的文章:

  • linux和unix怎么样加密口令的?为什么密码一样,加密后的不一样?
  • 非常着急,关于DES加密的,用java加密过的字符串,药用Linux下的C语言来解密,涉及到补位的问题,弄了几天都没有实现,有高手会的,请指点一二!!!!!!!!
  • 关于linux下的文件加密传输。
  • Linux 查看MD5加密的文件内容
  • linux下对文件加密
  • 磁盘加密工具 ScramDisk 4 Linux
  • Linux磁盘加密工具 cryptmount
  • 求Linux C 对文件进行加密解密的例子。
  • linux 的无线上网 iis7站长之家
  • Linux加密工具 Tomb
  • Linux内核加密问题
  • linux下用什么样的方法加密比较好呢
  • linux下拷贝文件加密
  • linux c 怎样实现 md5 ,des 加密算法
  • 如何调用linux内核自带的加密算法函数库??
  • 大家有人用过即时Linux的吗?? 还有怎么加密grub
  • linux下,使用openssl的des加密,密钥如何导出?
  • 一个加密的文件夹在linux下是否可以被删除
  • linux 可以采用crypt来加密口令,不知道有什么解密方法没有?
  • Linux下的加密VPN软件 CIPE
  • 纯C/C++ 有没有文件传输的SAMPLE(linux)
  • 请问 linux与windows两个平台下如何实现高速数据传输?
  • LINUX下如何查看正在传输的文件??
  • 在linux怎么编写文件传输
  • 用linux(服)windows(客)传输文件,windows端可以,linux端不可以,怎么回事???
  • 同一主机windows和linux文件传输
  • 有人做过Linux下的蓝牙传输吗,100分,先给20
  • linux无线网络传输也可以直接使用socket接口编程吗?
  • linux 下如何图片如何通过socket传输?
  • Linux 驱动事件传输?
  • 跪求linux下远程视频实时传输程序
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • D-link DWL-122无线网卡厂家没有提供Linux下的驱动,我应该怎么办使得此无线网卡能在Linux下用啊?
  • 基于Linux的无线路由软体 DD-WRT
  • linux下使用无线模块wifi发现不了网卡
  • Linux无线网络配置工具 xiwtool
  • linux如何设置无线上网呢
  • 在linux下如何实现无线网络迅速切换
  • 如何在linux下使用无线上网呢?
  • 关于Linux ubuntu10.10的无线连接
  • 笔记本安装scientific linux,无线用不了
  • 刚买的TP-LINK笔记本无线网卡?是否要装驱动?linux识别不了啊!?
  • 联想ThinkPad E520求Linux版的无线网卡驱动
  • Linux redhat 本本 无线路由上网配置
  • Linux 配置无线网络
  • Linux无线网络连接不稳定,大家有什么好方法?
  • Linux无线网卡驱动 MADWIFI
  • linux下怎么使用无线
  • linux 的无线上网
  • linux下怎样用无线网卡上网
  • linux程序怎么设置无线网卡的混杂模式?
  • 求救!笔记本电脑linux下安装usb无线网卡问题!
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • linux命令大全详细分类介绍及常用linux命令文档手册下载


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3