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

推荐订阅源

月光博客
月光博客
Martin Fowler
Martin Fowler
Last Week in AI
Last Week in AI
罗磊的独立博客
阮一峰的网络日志
阮一峰的网络日志
博客园 - 【当耐特】
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
V
Visual Studio Blog
Hugging Face - Blog
Hugging Face - Blog
雷峰网
雷峰网
博客园_首页
人人都是产品经理
人人都是产品经理
量子位
美团技术团队
The Cloudflare Blog
小众软件
小众软件
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
Microsoft Security Blog
Microsoft Security Blog
D
DataBreaches.Net
博客园 - Franky

博客园 - 找事的狐狸

“摸”电脑的时代(三):解析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原创, 未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。