




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、授课:XXX授课:XXXVFP中的加密算法一、前言在应用软件中,数据库管理软件是应用的最广泛的软件。数据库管理软件的安全性、保密性是开发、应用人员较为关心的。如何防止无关人员浏览数据库,如何防止数据库被非法修改、破坏?常用的方法是给数据库、管理程序加上密码。那么,加了密码就安全了吗?怎样才能使密码安全呢?二、传统的密码加密方法从dBASE到dBASEIII,从FOXBASE到FOXBASE+,从FOXPRO到VISUALFOXPRO,常用加密码的方法给程序、数据库加密。常见的密码有以下几种:固定密码,简单加密的固定密码,加密变化的密码,具体分析如下:1、固定密码固定密码,就是系统只有一个密码,
2、而且是固定的,不可变的。常见于用Dbase、FOXBASE、FOXBASE、FOXPRO2.X开发的数据库管理系统。常用如下语句:I=1DOWHILE.T.PWD=SPACE(8)SETCONSOFF12,35SAY口令!ACCEPTTOPWDIFTRIM(PWD)123456IFI=320,32SAY口令错误,您不能使用!RETURNENDIF12,30SAY第+STR(I,1)+次口令错!I=I+1ELSE20,28SAY欢迎使用本系统!EXITENDIFENDDO从以上语句不难看出,其核心是:变量PWD与输入值的比较。密码“1234”是程序设计时设定的,以后应用时是无法修改的,如果修改,
3、就要改变源程序。当然,也可以编写一段子程序用来修改密码,修改前,其判断旧密码是否正确,也用IFTRIM(PWD)123456语句。其灵活性很差,在pctool等工具出现后,保密性就显得差了。2、简单加密的固定密码简单加密的固定密码,是指把密码进行简单的加密,但密码仍然是固定的,不变的。简单加密一般有两种:“钥匙盘”法和“变换法”。“钥匙盘”法,就是把密码存放在一张软盘上,如果您需要使用本文档,请点击下载按钮下载!使用时,把“钥匙盘”插入计算机,系统程序读取软盘中的密码。或把密码和操作员姓名存到数据库中,此数据库存放于软盘内,使用时把“钥匙盘”插入计算机,系统读取软盘中的密码和操作员姓名,下面是
4、此法的主要语句:USEA:KLK&到KLK数据库内查找输入的操作员的姓名;I=1DOWHILE.T.STORESAPCE(8)TOXM10,26SAY请输入操作员姓名:GETXMREADLOCATEALLFORLTRIM(TRIM(XM)=LTRIM(TRIM(NAME)IF.NOT.EOF()EXIT&操作员姓名输入正确,向下执行;ENDIFIFI=3&操作员姓名输入计数,输入次数超过3次,退出系统;(代码同前)ENDIFENDDOIFI5&姓名正确后,比较输入口令正确否;MKL=SPACE(8)I=1DOWHILEI=3I=5EXITENDIF12,30SAY第+STR(I,1)+次口令错
5、!I=1+1ENDIFENDDOENDIFIFI=520,32SAY口令错误,您不能使用!ELSE20,32SAY欢迎使用!ENDIFRETURN这种加密方法保密性要好一些,但每次使用都要用“钥匙盘”进入系统,很繁琐。变换法,就是通过对密码的运算,使密码发生变化的方法,一般采用换算法,常用的加密语句如下:PSD=CHR(65)+CHR(66)+CHR(67)+9函数CHR(),是用来换算ASCII码的,换算后的PSD是ABC9。用这种简单的换算,可以避免密码被直接发现,如果和上述方法混合应用,保密性就加强了。3、简单加密变化的密码以上密码都是固定的,下面介绍一种经简单加密变换的密码。这是利用时
6、间函数来加密的算法,密码每天都不同。密码由变化的时间和固定字符构成。其核心语句为:kl=DATE()PWD=SUBSTR(CDOW(kl),1,3)+1234CDOW()函数,输入年月日,返回星期几(字符型)。操作者根据今天是星期几,将星期的前3个英文字母和固定的“1234”输入,与变量PWD比较。程序会把今天的日期换算成星期数,然后取前3位,并加上“1234”,合成今天的密码变量PWD。这样就实现了每天有不同的密码。保密性加强了。以上几种加密方法都是传统的简单的加密方法,其特点是简单、保密性差,密码单一,保护能力较低,主要用于Dbase、FOXBASE、FOXBASE+、FOXPRO2.X中
7、,由于上述软件的编译不是真正的编译,其密码容易被发现。种新型密码加密方法以上介绍的是几种固定的密码加密方法,下面介绍一下可变密码。“可变密码”指其密码值可由设置自行改变,这种方法一般由文件保存密码,且密码经过加密运算。密码的加密算运算方法很多,常用的有:转换法、位移法、时间法、随机法等。转换法,就是把输入的密码经过转换计算,转换成保存密码,取密码时再经过逆运算,把密码还原。不定时密码也时可变密码的一种,是指密码的出现是以随机方式来询问用户。如:用户在执行两个功能后必须输入密码,下一次检查密码可能在执行三个功能后检查密码。这种密码较为隐蔽。其方法如下:首先声明一个变量,用来计数,是1-5的随机数
8、;在每一个过程、函数、或命令执行前,累加该变量值;当该变量值等于其随机值时,调用密码查询程序。下面具体介绍一种基于VFP5.0的密码设定方法。其特点是:具有使用登记功能;每人一个密码,并可随时更换;密码经加密运算,不易被破解。基本思路如下:首先建立两个数据库(table),一个用来存放口令及对应的用户(称为“口令库”),另一个存放用户登录使用情况(称为“登录库”)。在再建立两个窗口(form),一个用来检查口令,另一个用来修改口令。接下来定义两个过程(procedure),个用来给口令加密(“加密如果您需要使用本文档,请点击下载按钮下载!过程”),另一个用给口令解密(“解密过程”)。这个“加密
9、过程”,是把密码经加密运算后存入口令库,而“解密过程”实际上是把输入的密码经加密运算后与口令库内的密码进行比较,并不是解密。为了使密码输入时不被人看见,要对密码输入的文字框的属性作如下工作进入DATA属性栏,把InputMask属性改为:XXXXXX,进入LAYOUT属性栏,把PassWordChar的属性改为:“*”,这样,输入的密码就不会被别人发现。(在FOXBASEFOXBASE+,FOXPRO2.X中,常用设置背景颜色与输入密码字符颜色相同的办法来防止别人看见。)“解密过程”代码如下:parameterpasswordpas=n1=asc(substr(name,1,1)&取姓名的第一
10、个拼音字母,换算成ASCII码n2=asc(substr(name,2,1)&作为加密的键值n3=asc(substr(name,3,1)n=int(n1+n2+n3)/3)fori=1tolen(trim(password)&使用BITXORO函数对密码进行解密tempchr=bitxor(asc(substr(password,i,1),n)pas=pas+chr(tempchr)endforlocateforklk.user_id=name&与口令库内的与姓名相对应的口令进行比较if(klk.keypas)and(passwordhg)result=.f.elseresult=.t.en
11、difreturnresultBITXOR()函数是vfp特有的函数,它将函数的两个参数转换成二进制数,并且执行“与”操作,返回一个十进制的结果。用它来进行加密运算,保密性强。加上密码键值n(取姓名的第一个拼音字母,经求和,再取平均值,再取整运算,换算成ASCII码),得到每人一个的密码。该“过程”的定义方法如下:在定义检查密码的窗口(form)的编辑状态下,用鼠标点菜单form,选“newmethod”,键入“过程”名。然后双击正在编辑的窗口(form),然后进入过程的编辑状态,写入如上代码。加密过程是解密过程的逆运算,代码如下:parameterpasswordpas=fori=1tole
12、n(trim(password)n1=asc(substr(name,1,1)n2=asc(substr(name,2,1)n3=asc(substr(name,3,1)n=int(n1+n2+n3)/3)tempchr=bitxor(asc(substr(password,i,1),n)如果您需要使用本文档,请点击下载按钮下载!如果您需要使用本文档,请点击下载按钮下载!授课:XXX授课:XXXpas=pas+chr(tempchr)endforreplacekeywithpas检查密码的思路是:先到输入姓名的文字框内取姓名,再到口令库内查找姓名,如果找不到姓名返回消息窗口“您不是指定用户,请
13、与系统管理员联系!”,系统退出;如果找到了用户姓名,则继续进行,把输入的口令和姓名送到解密“过程”中进行运算,解密“过程”将其解密并与口令库内的数据进行比较,如果不正确,开始计数,要求重新输入密码,三次不正确退出系统。如果正确,释放当前窗口,进入系统主要代码如口下:name=trim(ThisForm.Textl.value)ifempty(name)a=messagebox(请输入用户名!,0+48,信息窗口)ThisForm.Text1.setfocusreturnendifpass=trim(ThisForm.Text2.value)ifempty(pass)a=messagebox(请
14、输入口令!,0+48,信息窗口)ThisForm.Text2.setfocusreturnendifuseklklocateforklk.user_id=nameiffound()=.f.=messagebox(你不是指定用户,请与系统管理员联系!,64,提示信息)thisform.releaseelseok=Thisform.decode(pass)ifok=.t.ThisFormLabel3.caption二欢迎使用!waitwindow欢迎使用!按任意键进入“系统维护模块。”releasethisformdoformwh_whelseifm=3m=m+1ThisFormLabel3.ca
15、ption二口令错,您无权使用a=messagebox(对不起,您无权使用!,0+48,信息窗口)releasethisformelsea=messagebox(口令错,请重新输入!,0+48,信息窗口)ThisForm.Text2.value=ThisForm.Text2.setfocusm=m+1endifendifendif改变密码的思路是:首先读取用户姓名,如果是新用户则请用户输入新密码,并记录下获得新密码的时间;如果是老用户,则读取用户旧密码,将旧密码进行解密运算并和口令库内容比较,如果正确,请用户输入新密码,并将新密码通过解密运算存入口令库,并记录修改时间。主要代码如下:name=
16、ThisForm.Text3.valueoldpass=ThisForm.Text1.valuenewpass=ThisForm.Text2.valueifisblank(newpass)=messagebox(请重新输入新密码!,64,信息提示)ThisForm.Text1.setfocus()returnendifsuccess=thisform.decode(oldpass)ifnotsuccess=messagebox(旧密码不正确,重新输入密码!,64,信息提示)ThisForm.Text1.setfocus()returnendiflocateforklk.user_id=name
17、&newuserlogoiffound()=.f.=messagebox(您是新用户!,64,信息提示)appendblankreplaceklk.user_idwithname,klk.logo_ddatewithdate()thisform.text3.setfocusendifthisform.Encode(newpass)=messagebox(旧密码已经修改完成,下次请使用新密码!,64,信息提示)ThisForm.Command2.setfocusreturn注意,在改变密码的窗口(form)中,要定义“加密过程”和“解密过程”,方法如上所述。以上是一个加密算法的主要思路和关键代码
18、,其它部分读者可自行设计。这个加密算法授课:XXX授课:XXX如果您需要使用本文档,请点击下载按钮下载!还可以进一步完善。如采用不同的函数进行运算,加入日期,使每个人每天的密码都不一样(加入时间的算法如前所述,利用CDOW()函数作为键值的一部分。)。简单点,可以用BITXOR()函数加密。下例中123是“密钥”,cs=AS45W6GHU6ct=FORi=1TOLEN(cs)ch=SUBSTR(cs,i,1)chn=ASC(ch)ct=ct+CHR(BITXOR(chn,123)endfor?cs?ct给个最简单的“算法原理提示”你去发挥吧。当然你也可以把他改成用“密钥”来加密,原理是一样的。
19、当每一个字符都匹配相应的“密钥”时,不知道“密钥”是解不开的。cs=AS45W6GHU6ct=FORi=1TOLEN(cs)ch=SUBSTR(cs,i,1)DOCASECASEASC(ch)=48ANDASC(ch)=65ANDASC(ch)=97ANDASC(ch)123chn=ASC(ch)-98ct=ct+CHR(25-chn)+98)如果您需要使用本文档,请点击下载按钮下载!如果您需要使用本文档,请点击下载按钮下载!授课:XXX授课:XXXENDCASEendfor?cs?ct加密后的字符串就是ZH54D3TSF36楼wuzhouhong所讲的话太看小我们狐友的“IQ”了!还是7楼0
20、901chang狐友看懂了我的意思。知道抗战时期中美联合成立的“黑室”吗?知道啥是“永不重复的密钥”?知道“大地”这本书吗?下面给你VFP的“演示”程序你看看。为了方便就借用0901chang狐友的回帖内容来示范,以表示对他的感谢!。*加密“演示”?cs=好比我们上街&明码ke=最好放到存车处&密钥ct=i=1DOWHILEi55110chn=chn-4995ENDIFct=ct+CHR(chn)i=i+2ENDDO?cs&明码?ke&密钥?ct&加密后的字符串为“晤糑諻蒁蝩罧”*解密“演示”cs=晤糑諻蒁蝩罧&加密后的字符串ke=最好放到存车处&密钥ct=i=1DOWHILEiLEN(cs)
21、ch=SUBSTR(cs,i,2)ky=SUBSTR(ke,i,2)chn=ASC(ch)-(ASC(ky)-45120)IFchn45120chn=chn+4995ENDIFct=ct+CHR(chn)i=i+2ENDDO?cs&加密后的字符串?ke&密钥?ct&解密后的字符串好比我们上街看到了吧!请6楼研究以下“晤糑諻蒁蝩罧”这几个字符串,看看有啥“规律”能推算得出“最好放到存车处”吗?哈哈。要是我用“大地”中文版这本书或一次性“随机字符”(美国发射核弹就是用他)做密钥并不告诉你,你能解吗?当然上面的“演示”只是个原理,如要真正实用还有很长的“路”要走我已给出思路,我也不便在大庭广众再细讲
22、,还请大家原谅。为了“安全”欢迎私下交流。对于foxdb同学的见解,我表示钦佩。我没有看过什么大地我只知道目前市面可以公开买到的密码书籍涉及的技术都是50年前的,或者说都已经脱密了的。0901chang先生说的那件事我知道,一个中国女人,发现了MID5算法的哈希算法存在可预测的概率性,为穷尽法指明了缩短时间的途径。还是围绕foxdb同学提出的问题,我来解开你的密码,首先假设我不知道你用的何种算法,只有一段密文:晤糑諻蒁蝩罧和一段已知的明文:好比我们上街我猜测密文和明文之间存在某种联系,于是逐个字节分析关系得到密文和明文的ASCII序列密文:206,238,188,75,214,87,201,6
23、8,206,117,193,75明文:186,195,177,200,206,210,195,199,201,207,189,214差值:20,43,11,-125,8,-123,6,-131,5,-90,4,-139但是我现在还不知道究竟是什么关系,于是我再想办法制造了一段明文,然后想办法让你加密,于是我又获得了一段密文(用你上面写的程序加密)。密文:蹄訰荰藈祇蜘明文:父上肯批吧娣再次分析ASCII码密文:204,227,212,82,199,84,203,119,181,111,214,169明文:184,184,201,207,191,207,197,250,176,201,230,18
24、3差值:20,43,11,-125,8,-123,6,-131,5,-90,-16,-14我获得了一个重要发现,就是两次加密,获得了同一个差值序列“20,43,11,-125,8,-123,6,-131,5,-90”只有后面2位不一授课:XXX授课:XXX如果您需要使用本文档,请点击下载按钮下载!样,不过这就已经足够了,我判断你的密码就是明文的如果您需要使用本文档,请点击下载按钮下载!如果您需要使用本文档,请点击下载按钮下载!授课:XXX授课:XXXASCII码依次加/减掉上述的差值。到这里,foxdb同学的密码已经基攻破,剩下的就是再发一段明文进行验证了,经过测试,发现后面的的两位加密不同,
25、是因为程序有缺陷,原来的信息被破坏掉了,在某种情况下,加密程序自己也无法还原自己的密文,就是“chn=chn-4995”这段造成的。foxdb同学看来对自己的程序很有信心,我不知道事詆腍墟虅是什么东西,回答这个问题就好像去求解只有一个方程,但是有3个未知数的方程组。但是根据先前的分析,知道你得密码和明码之间是一个差值,这个差值和你的“密钥”直接相关。既然这样,我们直接在密文ASCII的基础上加N,然后看这个加N后的字符是否有意义,如果出现有意义的字符则保留,对下一字符同样处理,直到整句话都变成有意义的字,这样的结果肯定有很多个,然后再从中挑选出一批进行测试,密码一定在里面。由于总的计算量=25
26、5的10次方,我的计算机干不了这事。不过换一台小型机就可以了。另外,刚才我假设不知道你的加密方法,而现在我假设获取了你的加密方法,仅不知道你的“密钥”而已。我用你的解密程序,用我已知的密钥“最好放到存车处”,得到解密的明文“稐射济薸寝”,用这个明文,再次用已知密钥加密的结果还是“事詆腍墟虅”,就是说,我使用了两个明文,一个是“稐射济薸寝”,还有一个是你的新的明文(暂称X),得到一个相同的密文事詆腍墟虅于是我采取另一种攻击方法,我使用自己制造出来的明文“稐射济薸寝”和已知的对应密钥“最好放到存车处”放到你的程序中,用我的密钥代替你的密钥,结果肯定得出和X密码同样的结果,如果这是个口令程序,那么我已经绕开了他的验证,当然这时候我还是不知道明文是什么。关于解密的问题,“如果没有进一步的线索,短的报文段不会提示其含义的。(J.Friedrichs)”,foxdb同学如果用这个密钥对一段长度超过密钥的明文进行加密,那不可避免的是密钥的信息会在密文中重复出现,到时候我就可以采取简单的ASCII比较方法就能解读出明文。为了方便你理解我的想法我给出一个密码的示范:密码:123456明文:今天是晴天因为我的密码表是这样规定的:1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 活体购销合同协议
- 飘窗整改合同协议
- 红菇收购合同协议
- 门店进货合同协议
- 理疗劳务合同协议
- 普通改造合同协议
- 技术服务合同协议
- 货款购房合同协议
- 耗材月结合同协议
- 篮球场翻合同协议
- 《中华人民共和国会计法》知识培训
- (二调)武汉市2025届高中毕业生二月调研考试 英语试卷(含标准答案)+听力音频
- 管理会计在京东中的应用
- 《广东社区备考指导》课件
- 第三单元 100以内的数与加减法 单元综合素质评价(含答案)冀教版一年级下册(2024)数学
- 消防安全逃生自救知识
- 自适应视觉目标跟踪硬件加速器设计
- 人教版(2024)八年级下册物理第十章《浮力》第4节 跨学科实践制作微型密度计 教案
- 动脉瘤蛛网膜下腔出血护理
- 2025年中国建筑股份限公司岗位招聘(法律事务部)高频重点提升(共500题)附带答案详解
- 软件信息技术服务行智能运维管理方案设计
评论
0/150
提交评论