惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

I
InfoQ
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Apple Machine Learning Research
Apple Machine Learning Research
月光博客
月光博客
B
Blog
罗磊的独立博客
GbyAI
GbyAI
博客园 - 三生石上(FineUI控件)
雷峰网
雷峰网
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Microsoft Security Blog
Microsoft Security Blog
宝玉的分享
宝玉的分享
The GitHub Blog
The GitHub Blog
人人都是产品经理
人人都是产品经理
博客园 - Franky
有赞技术团队
有赞技术团队
WordPress大学
WordPress大学
博客园 - 聂微东
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
Visual Studio Blog
MyScale Blog
MyScale Blog
Google DeepMind News
Google DeepMind News
G
Google Developers Blog
aimingoo的专栏
aimingoo的专栏

博客园 - 找事的狐狸

“摸”电脑的时代(三):解析Surface内部结构 “摸”电脑的时代(二):多点触摸秀 写于Silverlight整装待发之际(八):也谈Silverlight人才招聘策略 WinHec扫盲贴 《WPF揭秘》勘误表 如何隐藏UpdatePanel 支付宝实名制实现思路 程序员的必备装备——为健康加油 [好书推荐] C#和.NET 2.0实战:平台、语言与框架 老调重弹——你存储的密码做Hash了吗? JavaScript的世界从来没有像现在这样精彩 CSS实现不同的打印和屏幕显示结果 [翻译] Vista中的音量II: Windows Vista音量种类 如何检测是否安装了.NET 2.0和.NET 3.0 闲话WPF近期发展 浅析Family Show 2.0的子窗体实现 WPF实现Tag Cloud 浅析Family Show 2.0的数据结构及基本算法 如何实现一个不规则形状的WPF窗口
文件加密的简单实现(C语言)
数字游民托尼 · 2007-10-09 · via 博客园 - 找事的狐狸

需求:以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;

版权声明:本文由作者Tony Qu原创, 未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。