当前位置: 首页 > news >正文

将文件加入到图形文件里;

今天到csdn有朋友短信问我如何写文件到图象内,反正是学习C#,就又写了一个这样的小工具

比如说公司不能携带源代码;可以带图片;要做的就是把源码用rar打个包,然后找个bmp文件,打开它,在尾部增加几个特征字符串,再把rar的数据增加上去,ok了。带出去后,打开bmp文件,找到特征字符串,把尾部记录复制出来,保存到一个新文件内;
该方法同样可以用于EXE文件.


为了简便操作,用C#编写了一个工具软件,以下是部分代码,(本人菜鸟臭作、高手勿笑):


ExpandedBlockStart.gif ContractedBlock.gif private bool EncodeDataToBitmap( string srcBmpFile, string srcFile, string destBmpFile) dot.gif {
InBlock.gif//加入到文件尾部
InBlock.gif
System.IO.FileStream SBF= null;
InBlock.gif System.IO.FileStream SF= null;
InBlock.gif System.IO.FileStream DBF= null;
InBlock.gifbyte[] srcBmpByte;
InBlock.gifbyte[] srcFileByte;
ExpandedSubBlockStart.gifContractedSubBlock.giftry dot.gif{
InBlock.gif SBF = new System.IO.FileStream(srcBmpFile,System.IO.FileMode.Open, System.IO.FileAccess.Read);
InBlock.gif SF = new System.IO.FileStream(srcFile,System.IO.FileMode.Open, System.IO.FileAccess.Read);
InBlock.gif DBF = new System.IO.FileStream(destBmpFile,System.IO.FileMode.CreateNew, System.IO.FileAccess.Write);
InBlock.gif
InBlock.gif srcBmpByte = new byte[SBF.Length];
InBlock.gif SBF.Read(srcBmpByte,0,(int)SBF.Length);
InBlock.gif srcFileByte = new byte[SF.Length];//取得该数据可以进一步加密一下或压缩一下
InBlock.gif
SF.Read(srcFileByte,0,(int)SF.Length);
InBlock.gif DBF.Write(srcBmpByte,0,srcBmpByte.Length);
InBlock.gif DBF.Write(System.Text.Encoding.Default.GetBytes("abcdefg"),0,System.Text.Encoding.Default.GetBytes("abcdefg").Length);
InBlock.gif DBF.Write(srcFileByte,0,srcFileByte.Length);
InBlock.gif
InBlock.gifreturn true;
ExpandedSubBlockStart.gifContractedSubBlock.gif }catchdot.gif{
InBlock.gifreturn false;
ExpandedSubBlockStart.gifContractedSubBlock.gif }finallydot.gif{
InBlock.gifif(SBF!=null)
InBlock.gif SBF.Close();
InBlock.gifif(SF!=null)
InBlock.gif SF.Close();
InBlock.gifif(DBF!=null)
InBlock.gif DBF.Close();
ExpandedSubBlockEnd.gif }
ExpandedBlockEnd.gif }


代码就和上面所说的一样
1、读bmp数据
2、读文件数据
3、创建新bmp文件
4、写bmp数据
5、写特征字符串
6、写文件数据
7、完毕。

下面是拆开文件的代码:
ExpandedBlockStart.gif ContractedBlock.gif private bool DecodeDataFromBitmap( string srcBmpFile, string destFile) dot.gif {
InBlock.gif System.IO.FileStream SBF = null;
InBlock.gif System.IO.FileStream DF = null;
InBlock.gifbyte[] srcBmpByte;
ExpandedSubBlockStart.gifContractedSubBlock.giftrydot.gif{
InBlock.gif SBF = new System.IO.FileStream(srcBmpFile,System.IO.FileMode.Open,System.IO.FileAccess.Read);
InBlock.gif DF = new System.IO.FileStream(destFile,System.IO.FileMode.CreateNew,System.IO.FileAccess.Write);
InBlock.gif
InBlock.gif srcBmpByte = new byte[SBF.Length];
InBlock.gif SBF.Read(srcBmpByte,0,(int)SBF.Length);
InBlock.gif
InBlock.gifstring f = "";
InBlock.gifint offset = 0;
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.giffor(int i=0;i<srcBmpByte.Length- 7;i++)dot.gif{
InBlock.gif f = "";
ExpandedSubBlockStart.gifContractedSubBlock.giffor(int j=i;j<i+7;j++)dot.gif{
InBlock.gif f+=(char)srcBmpByte[j];
ExpandedSubBlockEnd.gif }
ExpandedSubBlockStart.gifContractedSubBlock.gifif(f=="abcdefg")dot.gif{
InBlock.gif offset = i+7;
InBlock.gifbreak;
ExpandedSubBlockEnd.gif }
ExpandedSubBlockEnd.gif }
ExpandedSubBlockStart.gifContractedSubBlock.gifif(offset==0)dot.gif{
InBlock.gif f ="";
ExpandedSubBlockStart.gifContractedSubBlock.giffor(int i=srcBmpByte.Length-7;i<srcBmpByte.Length;i++)dot.gif{
InBlock.gif f+=(char)srcBmpByte[i];
ExpandedSubBlockEnd.gif }
ExpandedSubBlockStart.gifContractedSubBlock.gifif(f=="abcdefg")dot.gif{
InBlock.gif offset = srcBmpByte.Length-7;
ExpandedSubBlockStart.gifContractedSubBlock.gif }elsedot.gif{
InBlock.gif MessageBox.Show("该文件未被加入数据!");
InBlock.gifreturn false;
ExpandedSubBlockEnd.gif }
ExpandedSubBlockEnd.gif }
InBlock.gif
InBlock.gif DF.Write(srcBmpByte,offset,srcBmpByte.Length-offset);
InBlock.gifreturn true;
ExpandedSubBlockStart.gifContractedSubBlock.gif }catchdot.gif{
InBlock.gifreturn false;
ExpandedSubBlockStart.gifContractedSubBlock.gif }finallydot.gif{
InBlock.gifif(SBF!=null)SBF.Close();
InBlock.gifif(DF!=null)DF.Close();
ExpandedSubBlockEnd.gif }
ExpandedBlockEnd.gif }

过程是
1、读bmp文件
2、建立新文件
3、查找特征字符串
4、写新文件(特征字符串偏移位置+特征字符串长度)
5、完成。 



本文转自suifei博客园博客,原文链接:http://www.cnblogs.com/Chinasf/archive/2005/04/28/146740.html,如需转载请自行联系原作者

相关文章:

  • Eclipse中已安装的插件如何卸载
  • Linux实现vnc管理
  • Redis的复制流程
  • 批处理 去掉变量空格
  • xshell及secureCRT保存日志
  • 微服务架构优缺点
  • SonicWall防火墙IM禁止Skype软件
  • CentOS 5 (64位)下lnmp平台搭建
  • 总结ldap碰到的问题
  • java cms系统 springmvc mybatis UC浏览器文章相关功能
  • 使用应答文件安装域控制器
  • 布局 约束添加规则
  • 扭转思想seo不仅仅是排名
  • centos6.5安装tensorflow
  • Mac说——关闭SIP
  • Angular数据绑定机制
  • Java编程基础24——递归练习
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • spark本地环境的搭建到运行第一个spark程序
  • Spring Boot MyBatis配置多种数据库
  • Theano - 导数
  • vue-router 实现分析
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 动态规划入门(以爬楼梯为例)
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 模型微调
  • 入口文件开始,分析Vue源码实现
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 一个SAP顾问在美国的这些年
  • 以太坊客户端Geth命令参数详解
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 阿里云服务器购买完整流程
  • 第二十章:异步和文件I/O.(二十三)
  • 湖北分布式智能数据采集方法有哪些?
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (1)Nginx简介和安装教程
  • (安卓)跳转应用市场APP详情页的方式
  • (办公)springboot配置aop处理请求.
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (论文阅读40-45)图像描述1
  • (原)本想说脏话,奈何已放下
  • (转)http协议
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)负载均衡,回话保持,cookie
  • (转载)Google Chrome调试JS
  • (转载)PyTorch代码规范最佳实践和样式指南
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET delegate 委托 、 Event 事件,接口回调
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET的微型Web框架 Nancy
  • .net实现客户区延伸至至非客户区
  • .NET文档生成工具ADB使用图文教程
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复