如何进行MD5验证Word下载.docx

上传人:b****1 文档编号:3852330 上传时间:2023-05-02 格式:DOCX 页数:16 大小:22.54KB
下载 相关 举报
如何进行MD5验证Word下载.docx_第1页
第1页 / 共16页
如何进行MD5验证Word下载.docx_第2页
第2页 / 共16页
如何进行MD5验证Word下载.docx_第3页
第3页 / 共16页
如何进行MD5验证Word下载.docx_第4页
第4页 / 共16页
如何进行MD5验证Word下载.docx_第5页
第5页 / 共16页
如何进行MD5验证Word下载.docx_第6页
第6页 / 共16页
如何进行MD5验证Word下载.docx_第7页
第7页 / 共16页
如何进行MD5验证Word下载.docx_第8页
第8页 / 共16页
如何进行MD5验证Word下载.docx_第9页
第9页 / 共16页
如何进行MD5验证Word下载.docx_第10页
第10页 / 共16页
如何进行MD5验证Word下载.docx_第11页
第11页 / 共16页
如何进行MD5验证Word下载.docx_第12页
第12页 / 共16页
如何进行MD5验证Word下载.docx_第13页
第13页 / 共16页
如何进行MD5验证Word下载.docx_第14页
第14页 / 共16页
如何进行MD5验证Word下载.docx_第15页
第15页 / 共16页
如何进行MD5验证Word下载.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

如何进行MD5验证Word下载.docx

《如何进行MD5验证Word下载.docx》由会员分享,可在线阅读,更多相关《如何进行MD5验证Word下载.docx(16页珍藏版)》请在冰点文库上搜索。

如何进行MD5验证Word下载.docx

CDO.MessageoMsg=newCDO.Message();

oMsg.From=myaccount@

oMsg.To=myaccount@

oMsg.Subject=MailTest

oMsg.HTMLBody=htmlbodyTest/body/html

CDO.IConfigurationiConfg=oMsg.Configuration;

ADODB.FieldsoFields=iConfg.Fields;

oFields[].Value=2;

oFields[].Value=myaccount@//sendermail

oFields[].Value=myaccount@//emailaccount

oFields[].Value=usernameoFields[].Value=passwordoFields[].Value=1;

//value=0代表Anonymous验证方式(不需要验证)

//value=1代表Basic验证方式(使用basic(clear-te_t)authentication.

//Theconfigurationsendusername/sendpasswordorpostusername/postpasswordfieldsareusedto

specifycredentials.)

//Value=2代表NTLM验证方式(SecurePasswordAuthenticationinMicrosoftOutlookE_press)

oFields[].Value=0___;

oFields[].Value=smtp._

oFields.Update();

oMsg.BodyPart.Charset=gb23_

oMsg.HTMLBodyPart.Charset=gb23_

oMsg.Send();

oMsg=null;

}

catch(E_ceptione)

throwe;

注意:

由于E_change_的CDO组件cdoe_.dll会更新原有的Windows_的CDO组件cdosys.dll,所以如果您希望继续使用cdosys.dll,您必须先通过regsrv32.e_e卸载掉cdoe_.dll.

第三.使用Socket撰写邮件发送程序

当然,如果您觉得SmtpMail不能满足您的需求,CDO又不够直截了当,那就只能自己动手了;

其实如果您很熟悉Socket编程,自己写一个发送邮件的程序并不很难,以下就是一个例子.

首先,我们简单介绍一下带验证的SMTP服务器如何使用AUTH原语进行身份验证,其详细的定义可以参考RFC2554.

具体如下:

1)首先,需要使用EHLO而不是原先的HELO.

2)EHLO成功以后,客户端需要发送AUTH原语,与服务器就认证时用户名和密码的传递方式进行协商.

3)如果协商成功,服务器会返回以3开头的结果码,这是就可以把用户名和密码传给服务器.

4)最后,如果验证成功,就可以开始发信了.

下面是一个实际的例子,客户端在Win_P的Command窗口中通过telnetsmtp.263.NET25命令连接到263的smtp服务器发信:

2_WelcometocoremailSystem(WithAnti-Spam)2.1

EHLO263.NET

250-_2._8.30.29

250-PIPELINING

250-SIZE1_4__

250-ETRN

250-AUTHLOGIN

2508BITMIME

AUTHLOGIN

334V_Nlcm5hbWU6

b_lhY2NvdW50

334UGFzc3dvcmQ6

b_lwY_Nzd29yZA==

235Authenticationsuccessful

MAILFROM:

myaccount@263.NET

250Ok

RCPTTO:

Data

354EnddatawithCRLF.CRLF

Thisisatestingemail.

haha.

.

250Ok:

queuedasAC5291D64_C4

QUIT

2_Bye

上面的内容就是发信的全过程.其中与身份验证有关的主要是第九到第十四行:

AUTHLOGIN客户端输入

334V_Nlcm5hbWU6服务器提示〝Username:

=

b_lhY2NvdW50客户端输入〝myaccount=的Base64编码

334UGFzc3dvcmQ6服务器提示〝Password:

b_lwY_Nzd29yZA==客户端输入〝mypassword=的Base64编码

235Authenticationsuccessful服务器端通过验证

从上面的分析可以看出,在这个身份验证过程中,服务器和客户端都直接通过Socket传递经过标准Base64编码的纯文本.这个过程可以非常方便的用C_实现,或者直接添加到原有的源代码中.

另外,有些ESMTP服务器不支持AUTHLOGIN方式的认证,只支持AUTHCRAM-MD5方式验证.但是这两者之间的区别只是文本的编码方式不同.

实现此功能的源代码可以在SourceForge.NEThttp:

//sourceforge.NET/projects/opensmtp-net/上找到下载.下面给出了一个简单的伪码:

publicvoidSendMail(MailMessagemsg)

NetworkStreamnwstream=GetConnection();

WriteToStream(refnwstream,EHLO+smtpHost+\r\n

stringwelcomeMsg=ReadFromStream(refnwstream);

//implementHELOcommandifEHLOisuecognized.

if(IsUnknownCommand(welcomeMsg))

WriteToStream(refnwstream,HELO+smtpHost+\r\n

CheckForError(welcomeMsg,ReplyConstants.OK);

//Authenticationisusediftheu/paresupplied

AuthLogin(refnwstream);

WriteToStream(refnwstream,MAILFROM:

+msg.From.Address+\r\nCheckForError(ReadFromStream(refnwstream),ReplyConstants.OK);

SendRecipientList(refnwstream,msg.To);

SendRecipientList(refnwstream,msg.CC);

SendRecipientList(refnwstream,msg.BCC);

WriteToStream(refnwstream,DATA\r\n

CheckForError(ReadFromStream(refnwstream),ReplyConstants.START_INPUT);

if(msg.ReplyTo.Name!

=nullmsg.ReplyTo.Name.Length!

=0)

{WriteToStream(refnwstream,Reply-To:

\+msg.ReplyTo.Name+\+msg.ReplyTo.Address+\r\n}

else

+msg.ReplyTo.Address+\r\n}

if(msg.From.Name!

=nullmsg.From.Name.Length!

{WriteToStream(refnwstream,From:

\+msg.From.Name+\+msg.From.Address+\r\n}

+msg.From.Address+\r\n}

WriteToStre

篇三:

单片机常用校验方法

常见校验算法

一.校验算法

奇偶校验(单字节奇偶校验和多字节奇偶校验)

MD5校验

求校验和

BCC(BlockCheckCharacter/信息组校验码),常说的异或校验方法

CRC(CyclicRedundancyCheck/循环冗余校验)

LRC(LongitudinalRedundancyCheck/纵向冗余校验)

二.奇偶校验

内存中最小的单位是比特,也称为〝位〞,位有只有两种状态分别以1和0来标示,每8个连续的比特叫做一个字节(byte).不带奇偶校验的内存每个字节只有8位,如果其某一位存储了错误的值,就会导致其存储的相应数据发生变化,进而导致应用程序发生错误.而奇偶校验就是在每一字节(8位)之外又增加了一位作为错误检测位.在某字节中存储数据之后,在其8个位上存储的数据是固定的,因为位只能有两种状态1或0,假设存储的数据用位标示为1.1.1.0.0.1.0.1,那么把每个位相加(1+1+1+0+0+1+0+1=

5),结果是奇数,那么在校验位定义为1,反之为0.当CPU读取存储的数据时,它会再次把前8位中存储的数据相加,计算结果是否与校验位相一致.从而一定程度上能检测出内存错误,奇偶校验只能检测出错误而无法对其进行修正,同时虽然双位同时发生错误的概率相当低,但奇偶校验却无法检测出双位错误

三.MD5校验

MD5的全称是Message-DigestAlgorithm5,在90年代初由MIT的计算机科学实验室和RSADataSecurityInc发明,由MD2/MD3/MD4发展而来的.MD5的实际应用是对一段Message(字节串)产生fingerprint(指纹),可以防止被〝篡改〞.举个例子,天天安全网提供下载的MD5校验值软件WinMD5.zip,其MD5值是1e_ab3591d25583eff5_9293dc98d2,但你下载该软件后计算MD5发现其值却是8_95f50b94bb4891a4ce4ffb6ccf64b,那说明该ZIP已经被他人修改过,那还用不用该软件那你可自己琢磨着看啦.

四.求校验和

求校验和其实是一种或运算.如下:

//--------------------------------------------------------------------------------------------------//如下是计算校验位函数

//checkdata,包括起始位在内的前九位数据的校验和

//--------------------------------------------------------------------------------------------------unsignedcharCLU_checkdata(void)

{//求校验和

unsignedcharcheckdata=0;

for(point=0;

point9,TI=1;

point++)

checkdata=checkdata|buffer[point];

return(checkdata);

四.BCC(BlockCheckCharacter/信息组校验符号)

BCC校验其实是奇偶校验的一种,但也是经常使用并且效率较高的一种,所谓BCC校验法(blockcheckcharacter),就是在发送前和发送后分别把BCC以前包括ET_字符的所有字符按位异或后,按要求变换(增加或前去一个固定的值)后所得到的字符进行比较,相等即认为通信无错误,不相等则认为通信出错.

非接触卡读卡器与PC机的通讯格式如下:

ST_(_H)+6个字节的卡号+VERH+VERL+EOT(_H)

ST_(_H)起始字节

EOT(_H)结束字节

6个字节的卡号为六个十六进制的ASCII字符,6个字节的传送,高字节在前,低字节在后.例如:

卡号:

8DEF9E

传输的数据格式:

384445463945(十六进制)

在校验时采用目前最通用的BCC校验方式:

具体的方法是:

将有效的卡号接字节作异或(_OR)校验:

38H(_OR)44H(_OR)45H(_OR)46H(_OR)39H(_OR)45H=_H然后将接收到的数据VERH+VERL合成一个字节数据,30H(HE_)=0,33H(HE_)=3

合成数据为_H,接收到的数据与我们收到的卡号的校验数据一致,则接收到的卡号为正确卡号.

再比如现有卡号为:

058E42

303538453432(十六进制)

30H(_OR)35H(_OR)38H(_OR)45H(_OR)34H(_OR)32H=7EH然后将接收到的数据VERH+VERL合成一个字节数据,37H(HE_)=7,45H(HE_)=E

合成数据为7EH,接收到的数据与我们收到的卡号的校验数据一致,则接收到的卡号为正确卡号.

在编写程序时,可以先将所有数据都接收到计算机的内存中,然后计算BCC校验值VALUE1,再将接收的BCC值

拼成一个十六进制数VALUE2,然后比较这两个值,如果相等,则接收到的卡号为合法卡号,然后按您的系统

作相应的处理.

VB代码如下:

PublicFunctionbcc(aAsString)AsString

DimbAsInteger

b=0

Fori=1ToLen(a)Step2

b=b_or(h+Mid(a,i,2))

Ne_t

b=bAndHFF

Ifb_Then

bcc=0+He_(b)

Else

bcc=He_(b)

EndIf

EndFunction

五.CRC(CyclicRedundancyCheck/循环冗余校验)

CRC校验的基本思想是利用线性编码理论,在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的监督码(既CRC码)r位,并附在信息后边,构成一个新的二进制码序列数共(k+r)位,最后发送出去.在接收端,则根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错.

_位的CRC码产生的规则是先将要发送的二进制序列数左移_位(既乘以)后,再除以一个多项式,最后所得到的余数既是CRC码.

它是利用除法及余数的原理来作错误侦测(ErrorDetecting)的.实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CRC值不同,则说明数据通讯出现错误.

根据应用环境与习惯的不同,CRC又可分为以下几种标准:

①CRC-_码;

②CRC-_码;

③CRC-CCITT码;

④CRC-32码.

CRC-_码通常用来传送6-bit字符串.

CRC-_及CRC-CCITT码则用是来传送8-bit字符,其中CRC-_为美国采用,而CRC-CCITT为欧洲国家所采用.

CRC-32码大都被采用在一种称为Point-to-Point的同步传输中.

下面为CRC计算过程:

1.设置CRC寄存器,并给其赋值FFFF(he_).

2.将数据的第一个8-bit字符与_位CRC寄存器的低8位进行异或,并把结果存入CRC寄存器.

3.CRC寄存器向右移一位,MSB补零,移出并检查LSB.

4.如果LSB为0,重复第三步;

若LSB为1,CRC寄存器与多项式码相异或.

5.重复第3与第4步直到8次移位全部完成.此时一个8-bit数据处理完毕.

6.重复第2至第5步直到所有数据全部处理完成.

7.最终CRC寄存器的内容即为CRC值.

常用的CRC循环冗余校验标准多项式如下:

CRC(_位)=__+__+_2+1

CRC(CCITT)=__+__+_5+1

CRC(32位)=_32+_26+_23+__+__+__+__+_8+_7+_5+_4+_2+_+1

以CRC(_位)多项式为例,其对应校验二进制位列为11_0______.CRC基本原理是:

在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码又叫(N,K)码.对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(_),根据G(_)可以生成K位信息的校验码,而G(_)叫做这个CRC码的生成多项式.

校验码的具体生成过程为:

假设发送信息用信息多项式C(_)表示,将C(_)左移R位,则可表示成C(_)_2R,这样C(_)的右边就会空出R位,这就是校验码的位置.通过C(_)_2R除以生成多项式G(_)得到的余数就是校验码.

几个基本概念

1.多项式与二进制数码

多项式和二进制数有直接对应关系:

_的最高幂次对应二进制数的最高位,以下各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0.可以看出:

_的最高幂次为R,转换成对应的二进制数有R+1位.

多项式包括生成多项式G(_)和信息多项式C(_).

如生成多项式为G(_)=_4+_3+_+1,可转换为二进制数码__1.

而发送信息位__,可转换为数据多项式为C(_)=_3+_2+_+1.

2.生成多项式

是接受方和发送方的一个约定,也就是一个二进制数,在整个传输过程中,这个数始终保持不变.

在发送方,利用生成多项式对信息多项式做模2除生成校验码.在接受方利用生成多项式对收到的编码多项式做模2除检测和确定错误位置.

应满足以下条件:

a.生成多项式的最高位和最低位必须为1.

b.当被传送信息(CRC码)任何一位发生错误时,被生成多项式做模2除后应该使余数不为0.

c.不同位发生错误时,应该使余数不同.

d.对余数继续做模2除,应使余数循环.

将这些要求反映为数学关系是比较复杂的.但可以从有关资料查到常用的对应于不同码制的生成多项式如图9所示:

NK码距dG(_)多项式G(_)

743_3+_+11_1

743_3+_2+1__

734_4+_3+_2+1_1_

734_4+_2+_+11__

__3_4+_+11__

_75_8+_7+_6+_4+_____

3_63_5+_2+__1_

3_15__+_9+_8+_6+_5+_3+1_1_1__1

63573_6+_+1

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 外语学习 > 法语学习

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2