您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:47 来源:vckbase.com

本文章共2917字,分2页,当前第1页,快速翻页:
 

模拟信息加密流程图简介

作者:Nie Yong

下载源代码
逆风者

  Encryption_Demo 代码模拟了图一和图二的流程图内容,但仅仅只是模拟,谈不上什么应用;其应用过程限于程序间的传递过程,没有涉及到网络间数据传输,所以仅仅是模拟其过程而已。



图一 采用安全认证的信息加密流程图



图二 采用安全认证技术的信息解密过程图



图三 采用安全认证的信息加密流程图文字说明


图四 采用安全认证技术的信息解密过程图的文字说明

  Encryption_Demo 代码没有什么新奇之处。发布的目的在于使大家了解“采用安全认证的信息加密流程图”的运作过程。代码,大家可以下载看一看。下面我要说的是,最主要的工作体现在字节数组的偏移量的计算上。比如在本程序中采用MD5散列,其散列值固定长度16个字节;采用DES算法分组加密,其Key和IV字节数都为8个字节;采用RSA进行签名,签名长度固定为128个字节,而加密结果的长度呢,我们要加密的字节数组长度为128 8 8 = 144,那么RSA非对称加密后的字节数长度就为1152个字节长度。那么,在第一个流程图中,合并后的整个密文数据字节长度,我们知道不固定,可是它的第一部分和第三部分长度是固定的(再强调一次,我们这里使用DES分组加密算法,MD5散列函数,RSA方法签名和加密,下面分析结果也都是建立这基础上的)。比如:

加密后的会话密文 —— RsaEncryptData :1152
摘要签字 —— CombinData : 144
我们可以获得整个要截密文件的长度

string fileName = OpenFile("请打开要解密的文件:");

FileStream fs = new FileStream(fileName,FileMode.Open,FileAccess.Read);

  (int)fs.Length - 1152-144 运算结果就是中间密文---EncryptionDate 的长度。解密中间密文后,紧接着就要处理时间戳啦。我们分析时间戳的字节数组组成吧:

文件散列长度 :16

接收时间 :23

签名长度 :128

总共长度 :167

  既然知道这些字节数组的组成,你该知道怎么做了吧?关于处理接收时间戳的处理上,有点要注意的:

public static byte [] GetTimeNow()

{

	//这样转化成的格式为:2004-11-09 13:04:28-108 23个字节

	DateTime now = DateTime.Now;

	System.Text.UTF8Encoding utf = new System.Text.UTF8Encoding();

	

	string month = null ;

	if(now.Month<10)

		month = "0" now.Month.ToString();

	else

		month = now.Month.ToString();

	

	string day = null;

	if(now.Day<10)

		day = "0"   now.Day.ToString();

	else

		day = now.Day.ToString();

	

	string millisecond = null;

	if(now.Millisecond<10)

		millisecond = "00" now.Millisecond.ToString();

	if(now.Millisecond>=10&&now.Millisecond<=99)

		millisecond = "0"   now.Millisecond.ToString();

	if(now.Millisecond>=100)

		millisecond = now.Millisecond.ToString();

	string FullFormatTime = now.Year.ToString()  

                                 "-"   month   "-"   

                                 day   " "   

                                 now.ToLongTimeString()   "-"   millisecond ;

	//比如:2004-11-09 13:04:28-108

	return utf.GetBytes( FullFormatTime );         

} 		
  这样处理后的结果是接收时间精确到毫秒,且固定字节长度为23个字节。我们把第一个流程图的结果写进文件中去(其路径与你要加密的原始明文在同一目录下,主要是为了储存的方便),而流程图二的解密结果则保存在bin\Release目下。这样解密时需要读取文件,这里提供了两种方法,第一种把文件内容读取到一个数组里面,另外一种是需要时直接从文件中提取的指定的字节数组。第一种方法把文件内容读取到一数组,解密时分解数组,使用Buffer.BlockCopy( )函数分解既可。比如,从fileContent数组中偏移量1152处开始复制“length”长度字节复制到一个新的数组“Encrypt_Two”中去。
 
本文章更多内容1 - 2 - 下一页>>
相关文章

reference memory ,or when及其它
使用 ManWrap 库在本机 C 代码中调用.NET
浅析VC与matlab接口编程(一)
ADO开发中如何得到表格字段名
MSComm 控件的 Modem 通讯
使用DirectDraw的Gamma控制形成淡出效果
基于API的录音机程序
MFC程序员的WTL指南: Part III - 工具条与状
一个优秀的网格控件CGridCtrl
实现类似VC中可设断点的编辑窗口
彩电故障信息共享系统
利用IEHelper实现IE弹出窗口过滤
Ado 实现C 对象的存取
Branch,docking和volatile objects
利用RFC868协议编写网络对时程序
托管应用中的意外错误
定制调试诊断工具和实用程序——摆脱DLL“地
杂谈:项目管理的是与非
教你如何作弊玩扫雷
使用

相关评论


本文章所属分类:首页 VC++

  热门关键字: