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

推荐订阅源

H
Help Net Security
博客园 - Franky
GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
爱范儿
爱范儿
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recent Announcements
Recent Announcements
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
C
CERT Recently Published Vulnerability Notes
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
L
LangChain Blog
L
LINUX DO - 最新话题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hacker News: Front Page
MyScale Blog
MyScale Blog
P
Palo Alto Networks Blog
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
AI
AI
T
Troy Hunt's Blog
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
S
Secure Thoughts
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
S
Security @ Cisco Blogs
Cloudbric
Cloudbric
E
Exploit-DB.com RSS Feed
Attack and Defense Labs
Attack and Defense Labs

博客园 - 找事的狐狸

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