• 博客园Logo
  • 首页
  • 新闻
  • 博问
  • 专区
  • 闪存
  • 班级
  • 我的博客 写随笔 短消息
    用户头像
    我的博客 我的园子 账号设置 退出登录
    注册 登录
Tony Qu
我的软件工作室
博客园    首页    新随笔    联系   管理     

文件加密的简单实现(C语言)

需求:以DWORD为单位对文件进行加密,将每个DWORD与0xfcba0000做异或,写入另一个文件

解答:
#include <stdio.h>
#include 
<stdlib.h>

#define DWORD unsigned long
#define BYTE unsigned char 
#define false 0
#define true 1

int main(int argc, char *argv[])
{
  FILE 
*hSource;
  FILE 
*hDestination;
  
  DWORD dwKey
=0xfcba0000;

  
char* pbBuffer;
  DWORD dwBufferLen
=sizeof(DWORD);
  DWORD dwCount;
  DWORD dwData;

  
if(argv[1]==0||argv[2]==0)
  
{
    printf(
"missing argument!\n");
    
return false;
  }

  
char* szSource=argv[1];
  
char* szDestination=argv[2];
 
  hSource 
= fopen(szSource,"rb");// 打开源文件.
  hDestination = fopen(szDestination,"wb");    //打开目标文件

  
if (hSource==NULL) {printf("open Source File error !"); return false ;}
  
if (hDestination==NULL){ printf("open Destination File error !");  return false ;}
  
  
//分配缓冲区
  pbBuffer=(char* )malloc(dwBufferLen);
  
  
do {
    
// 从源文件中读出dwBlockLen个字节
    dwCount = fread(pbBuffer, 1, dwBufferLen, hSource);
    
//加密数据
    dwData = *(DWORD*)pbBuffer;  //char* TO dword
    dwData^=dwKey;        //xor operation
    pbBuffer = (char *) &dwData;
    
// 将加密过的数据写入目标文件
    fwrite(pbBuffer, 1, dwCount, hDestination);
  }
 while(!feof(hSource));
 
    
//关闭文件、释放内存
     fclose(hSource);
     fclose(hDestination);
  
  printf(
"%s is encrypted to %s\n",szSource,szDestination);
  
return 0;
}

心得:
char*转DWORD:dwData = *(DWORD*)pbBuffer;
DWORD转char*:pbBuffer = (char *) &dwData;
posted @ 2007-10-09 15:09  找事的狐狸  阅读(4263)  评论(0)  编辑  收藏
刷新评论刷新页面返回顶部
Copyright © 2021 找事的狐狸
Powered by .NET 5.0 on Kubernetes