毕业论文-加密技术的实现-无忧无虑毕设网_第1页
毕业论文-加密技术的实现-无忧无虑毕设网_第2页
毕业论文-加密技术的实现-无忧无虑毕设网_第3页
毕业论文-加密技术的实现-无忧无虑毕设网_第4页
毕业论文-加密技术的实现-无忧无虑毕设网_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 本文配套程序下载地址 : 无忧无虑毕设网 ()-大学生毕业设计站 ,免费毕业设计论文 ,无忧无虑毕设网 大学生毕业设计 ,出售各类毕业设计源码 ,论文 ,程序源码 ,网站源码 ,免费视频教程 ,我们将竭诚为您服务! 程 序 加 密 技 术 的 实 现 设计人: 指导教师: 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 中文摘要 随着着网络技术的发展,网络安全也就成为当今网络社会的焦点中的焦点,几乎没有人不在谈论安全问题,病毒、黑客程序、邮件炸弹、远程侦听等这一切都无不让人胆战心惊。病毒、黑客的猖獗使身处今日网络社会的人们感 觉到谈网色变,无所适从。 本论文详细介绍了根据磁盘序列号技术,进行对文件加密过程,以及加密的必要性。本程序使用 DELPHI语言开发。 关键字: 加密 DELPHI 磁盘序列号 软件保密 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 目 录 中文摘要 第一章 引 言 第二章 开发环境及需求 第三章 加密技术的发展 第四章 密码学简介 第五章 DELPHI介绍 第六章 注册技术实现 第七章、功能设计 第八章 详细设计 结 论 参考文献 致 谢 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 第一章 引 言 随着计算机技术的不 断发展,面向各应用领域或行业需求的软件不断的孕育而生。但无论哪种优秀的软件,其内部核心的技术往往是该软件的命脉,一旦被他人窃取或被非法复制,由此受到的经济损失是无法估计的。软件加密算法正是解决此问题的手段。随着软件加密算法研究的深入,软件加密技术的不断完善,将有效的打击盗版非法软件。使计算机行业更加规范化。对于保护知识产权法的实施也将有积极的意义。 随着网络技术的发展,网络安全也就成为当今网络社会的焦点中的焦点,几乎没有人不在谈论网络上的安全问题,病毒、黑客程序、邮件炸弹、远程侦听等这一切都无不让人胆战心惊 。病毒、黑客的猖獗使身处今日网络社会的人们感觉到谈网色变,无所适从。 但我们必需清楚地认识到,这一切一切的安全问题我们不可一下全部找到解决方案,况且有的是根本无法找到彻底的解决方案,如病毒程序,因为任何反病毒程序都只能在新病毒发现之后才能开发出来,目前还没有哪能一家反病毒软件开发商敢承诺他们的软件能查杀所有已知的和未知的病毒,所以我们不能有等网络安全了再上网的念头,因为或许网络不能有这么一日,就象“矛”与“盾”,网络与病毒、黑客永远是一对共存体。 现代的电脑加密技术就是适应了网络安全的需要 而应运产生的,它为我们进行一般的电子商务活动提供了安全保障,如在网络中进行文件传输、电子邮件往来和进行合同文本的签署等。其实加密技术也不是什么新生事物,只不过应用在当今电子商务、电脑网络中还是近几年的历史。下面我们就详细介绍一下加密技术的方方面面,希望能为那些对加密技术还一知半解的朋友提供一个详细了解的机会! 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 第二章 开发环境及需求 2 1、开发目的 如何保护自己的软件不被非授权盗用的问题,始终困扰着每一个程序员。当前世界上保护软件的方法有很多,主要是采用加密(如加软件狗)方式或软件注册方式。使用软 件狗等加密方法,虽然其保护最有效,但对授权用户的正常使用有一定的影响,而且软件发放比较复杂,在实际运用中比较少被采用。而注册登记方式则是当前最流行、运用最广泛的方法,虽然有许多通用软件其注册码可以很容易地被发烧友们所解,但对于独立程序员为某特定应用设计的应用软件而言,采用注册机制显得最经济、最方便,而且在一定的范围内非常有效。笔者在实际工作中,广泛使用了软件注册方法,有效地维护了软件的权益。 2 2、项目背景 dephi软件的功能极为强大,深受程序员喜欢。用 dephi开发的软件,可以很方便地加入注册机制。下 面笔者就如何在 dephi开发的软件中加入注册机制与朋友们交流心得。 实现软件注册机制,需解决以下几个问题: 1、如何加入注册检测,判断软件是否注册;2、如何隐藏注册码,及是否注册的标志; 3、在软件不注册情况下,如何限制软件的使用时间或次数; 4、对正常用户而言,不应造成使用不便。对于以上四个问题,如何隐藏注册码及是否注册的标志是关键。在 windows95中, win95 本身及大多数的应用软件都将其各种参数放入注册表中,因而注册表内的数据显得极为庞大和复杂。如果将注册标志隐藏在注册表的某一角落中,想要找到它并理解它 是极其困难的事。因此我们可以利用这一点,在注册表的某个分支上设置一个从名称上看毫无特殊意义的关键字,将自己软件的注册标志数据存放在这里。以下是整个注册机制的流程框图: 2 3、开发环境 1. 硬件条件 CPU PIII 400 Mz 内存 64M 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 硬盘 1G 2 软件要求 开发语言环境 DELPHI 7 操作系统 WIN2000 或者 WINXP,建议使用 WIN2000 其他要求:无 3. 运行需求 正常使用时不应出错,若运行时遇到不可恢复的系统错误,也必须保证数据完好无损,对数据的精确度、时 间特性、适应性等都有一定要求,要求系统运行时能够保证正确性、可靠性、高效性、完整性、易使用性、可维护性、可测试性、复用性、安全保密性、可移植性、互联性。 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 第三章 加密技术的发展 一、加密的由来 加密作为保障数据安全的一种方式,它不是现在才有的,它产生的历史相当久远,它是起源于要追溯于公元前 2000年(几个世纪了),虽然它不是现在我们所讲的加密技术(甚至不叫加密),但作为一种加密的概念,确实早在几个世纪前就诞生了。当时埃及人是最先使用特别的象形文字作为信息编码的,随 着时间推移,巴比伦、美索不达米亚和希腊文明都开始使用一些方法来保护他们的书面信息。 近期加密技术主要应用于军事领域,如美国独立战争、美国内战和两次世界大战。最广为人知的编码机器是 German Enigma机,在第二次世界大战中德国人利用它创建了加密信息。此后,由于 Alan Turing 和 Ultra计划以及其他人的努力,终于对德国人的密码进行了破解。当初,计算机的研究就是为了破解德国人的密码,人们并没有想到计算机给今天带来的信息革命。随着计算机的发展,运算能力的增强,过去的密码都变得十分简单了,于是人们又不断地研究出了新的数据加密方式,如利用 ROSA 算法产生的私钥和公钥就是在这个基础上产生的。 二、加密的概念 数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,使其只能在输入相应的密钥之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的。该过程的逆过程为解密,即将该编码信息转化为其原来数据的过程。 三、加密的理由 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 当今网络社会选择加密已是我们别无选择,其一是我们知道在互联网 上进行文件传输、电子邮件商务往来存在许多不安全因素,特别是对于一些大公司和一些机密文件在网络上传输。而且这种不安全性是互联网存在基础 TCP/IP 协议所固有的,包括一些基于TCP/IP的服务;另一方面,互联网给众多的商家带来了无限的商机,互联网把全世界连在了一起,走向互联网就意味着走向了世界,这对于无数商家无疑是梦寐以求的好事,特别是对于中小企业。为了解决这一对矛盾、为了能在安全的基础上大开这通向世界之门,我们只好选择了数据加密和基于加密技术的数字签名。 加密在网络上的作用就是防止有用或私有化信 息在网络上被拦截和窃取。一个简单的例子就是密码的传输,计算机密码极为重要,许多安全防护体系是基于密码的,密码的泄露在某种意义上来讲意味着其安全体系的全面崩溃。 通过网络进行登录时,所键入的密码以明文的形式被传输到服务器,而网络上的窃听是一件极为容易的事情,所以很有可能黑客会窃取得用户的密码,如果用户是 Root 用户或 Administrator用户,那后果将是极为严重的。 还有如果你公司在进行着某个招标项目的投标工作,工作人员通过电子邮件的方式把他们单位的标书发给招标单位,如果此时有另一位竞 争对手从网络上窃取到你公司的标书,从中知道你公司投标的标的,那后果将是怎样,相信不用多说聪明的你也明白。 这样的例子实在是太多了,解决上述难题的方案就是加密,加密后的口令即使被黑客获得也是不可读的,加密后的标书没有收件人的私钥也就无法解开,标书成为一大堆无任何实际意义的乱码。总之无论是单位还是个人在某种意义上来说加密也成为当今网络社会进行文件或邮件安全传输的时代象征! 数字签名就是基于加密技术的,它的作用就是用来确定用户是否是真实的。应用最多的还是电子邮件,如当用户收到一封电子邮件时,邮 件上面标有发信人的姓名和信箱地址,很多人可能会简单地认为发信人就是信上说明的那个人,但实际上伪造一封电子邮件对于一个通常人来说是极为容易的事。在这种情况下,就要用到加密技术基础上的数字签名,用它无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 来确认发信人身份的真实性。 类似数字签名技术的还有一种身份认证技术,有些站点提供入站 FTP和 WWW服务,当然用户通常接触的这类服务是匿名服务,用户的权力要受到限制,但也有的这类服务不是匿名的,如某公司为了信息交流提供用户的合作伙伴非匿名的 FTP服务,或开发小组把他们的 Web网页上载到用户的 WWW服务器上,现 在的问题就是,用户如何确定正在访问用户的服务器的人就是用户认为的那个人,身份认证技术就是一个好的解决方案。 在这里需要强调一点的就是,文件加密其实不只用于电子邮件或网络上的文件传输,其实也可应用静态的文件保护,如 PIP软件就可以对磁盘、硬盘中的文件或文件夹进行加密,以防他人窃取其中的信息。 四、两种加密方法 加密技术通常分为两大类:“对称式”和“非对称式”。 对称式加密就是加密和解密使用同一个密钥,通常称之为“ Session Key ”这种加密技术目前被广泛采用,如 美国政府所采用的 DES 加密标准就是一种典型的“对称式”加密法,它的 Session Key长度为 56Bits。 非对称式加密就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为“公钥”和“私钥”,它们两个必需配对使用,否则不能打开加密文件。这里的“公钥”是指可以对外公布的,“私钥”则不能,只能由持有人一个人知道。它的优越性就在这里,因为对称式的加密方法如果是在网络上传输加密文件就很难把密钥告诉对方,不管用什么方法都有可能被别窃听到。而非对称式的加密方法有两个密钥,且其中的“公钥”是可以公开的, 也就不怕别人知道,收件人解密时只要用自己的私钥即可以,这样就很好地避免了密钥的传输安全性问题。 五、加密技术中的摘要函数( MAD、 MAD 和 MAD) 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 摘要是一种防止改动的方法,其中用到的函数叫摘要函数。这些函数的输入可以是任意大小的消息,而输出是一个固定长度的摘要。摘要有这样一个性质,如果改变了输入消息中的任何东西,甚至只有一位,输出的摘要将会发生不可预测的改变,也就是说输入消息的每一位对输出摘要都有影响。总之,摘要算法从给定的文本块中产生一个数字签名( fingerprint 或 message digest),数字签名可以用于防止有人从一个签名上获取文本信息或改变文本信息内容和进行身份认证。摘要算法的数字签名原理在很多加密算法中都被使用,如 SO/KEY和 PIP( pretty good privacy)。 现在流行的摘要函数有 MAD和 MAD,但要记住客户机和服务器必须使用相同的算法,无论是 MAD还是 MAD, MAD 客户机不能和 MAD服务器交互。 MAD摘要算法的设计是出于利用 32位 RISC 结构来最大其吞吐量,而不需要大量的替换表( substitution table)来考虑的 。 MAD算法是以消息给予的长度作为输入,产生一个 128位的 指纹 或 消息化 。要产生两个具有相同消息化的文字块或者产生任何具有预先给定 指纹 的消息,都被认为在计算上是不可能的。 MAD 摘要算法是个数据认证标准。 MAD 的设计思想是要找出速度更快,比 MAD 更安全的一种算法, MAD的设计者通过使 MAD在计算上慢下来,以及对这些计算做了一些基础性的改动来解决安全性这一问题,是 MAD算法的一个扩展。 六、密钥的管理 密钥既然要求保密,这就涉及到密钥的管理问题,管理不好, 密钥同样可能被无意识地泄露,并不是有了密钥就高枕无忧,任何保密也只是相对的,是有时效的。要管理好密钥我们还要注意以下几个方面: 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 1、密钥的使用要注意时效和次数 如果用户可以一次又一次地使用同样密钥与别人交换信息,那么密钥也同其它任何密码一样存在着一定的安全性,虽然说用户的私钥是不对外公开的,但是也很难保证私钥长期的保密性,很难保证长期以来不被泄露。如果某人偶然地知道了用户的密钥,那么用户曾经和另一个人交换的每一条消息都不再是保密的了。另外使用一个特定密钥加密的信息越多,提供给窃听者的材料 也就越多,从某种意义上来讲也就越不安全了。 因此,一般强调仅将一个对话密钥用于一条信息中或一次对话中,或者建立一种按时更换密钥的机制以减小密钥暴露的可能性。 2、多密钥的管理 假设在某机构中有 100个人,如果他们任意两人之间可以进行秘密对话,那么总共需要多少密钥呢?每个人需要知道多少密钥呢?也许很容易得出答案,如果任何两个人之间要不同的密钥,则总共需要 4950个密钥,而且每个人应记住 99个密钥。如果机构的人数是1000、 10000人或更多,这种办法就显然过于愚蠢了,管理密钥将是 一件可怕的事情。 Kerberos提供了一种解决这个较好方案,它是由 MIT发明的,使保密密钥的管理和分发变得十分容易,但这种方法本身还存在一定的缺点。为能在因特网上提供一个实用的解决方案, Kerberos建立了一个安全的、可信任的密钥分发中心( Key Distribution Center,KDC),每个用户只要知道一个和 KDC进行会话的密钥就可以了,而不需要知道成百上千个不同的密钥。 假设用户甲想要和用户乙进行秘密通信,则用户甲先和 KDC 通信,用只有用户甲和KDC知道的密钥进行加密 , 用户甲告诉 KDC 他想和用户乙进行通信, KDC 会为用户甲和用户乙之间的会话随机选择一个对话密钥,并生成一个标签,这个标签由 KDC 和用户乙之间的密钥进行加密,并在用户甲启动和用户乙对话时,用户甲会把这个标签交给用户乙。这个标签的作用是让用户甲确信和他交谈的是用户乙,而不是冒充者。因为这个标签是由只有用户乙无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 和 KDC知道的密钥进行加密的,所以即使冒充者得到用户甲发出的标签也不可能进行解密,只有用户乙收到后才能够进行解密,从而确定了与用户甲对话的人就是用户乙。 当 KDC生成标签和随机会话密码,就会把它们用只 有用户甲和 KDC 知道的密钥进行加密,然后把标签和会话钥传给用户甲,加密的结果可以确保只有用户甲能得到这个信息,只有用户甲能利用这个会话密钥和用户乙进行通话。同理, KDC会把会话密码用只有 KDC和用户乙知道的密钥加密,并把会话密钥给用户乙。 用户甲会启动一个和用户乙的会话,并用得到的会话密钥加密自己和用户乙的会话,还要把 KDC传给它的标签传给用户乙以确定用户乙的身份,然后用户甲和用户乙之间就可以用会话密钥进行安全的会话了,而且为了保证安全,这个会话密钥是一次性的,这样黑客就更难进行破解了。同时由于密 钥是一次性由系统自动产生的,则用户不必记那么多密钥了,方便了人们的通信。 七、数据加密的标准 最早、最著名的保密密钥或对称密钥加密算法 DES(Data Encryption Standard)是由 IBM 公司在 70 年代发展起来的,并经政府的加密标准筛选后,于 1976 年 11 月被美国政府采用, DES 随后被美国国家标准局和美国国家标准协会( American National Standard Institute, ANSI)承认。 DES 使用 56 位密钥对 64 位的数据块进行加密,并对 64位的 数据块进行 16 轮编码。与每轮编码时,一个 48 位的 每轮 密钥值由 56 位的完整密钥得出来。 DES用软件进行解码需用很长时间,而用硬件解码速度非常快。幸运的是,当时大多数黑客并没有足够的设备制造出这种硬件设备。在 1977 年,人们估计要耗资两千万美元才能建成一个专门计算机用于 DES 的解密,而且需要 12 个小时的破解才能得到结果。当时DES被认为是一种十分强大的加密方法。 随着计算机硬件的速度越来越快,制造一台这样特殊的机器的花费已经降到了十万美元左右,而用它来保护十亿美元的银行,那显然是不够保险了。另一方 面,如果只用它来保护一台普通服务器,那么 DES确实是一种好的办法,因为黑客绝不会仅仅为入侵一个服务无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 器而花那么多的钱破解 DES密文。 另一种非常著名的加密算法就是 RSA了, RSA(Rivest-Shamir-Adleman)算法是基于大数不可能被质因数分解假设的公钥体系。简单地说就是找两个很大的质数。一个对外公开的为“公钥”( Prblic key) ,另一个不告诉任何人,称为 私钥”( Private key)。这两个密钥是互补的,也就是说用公钥加密的密文可以用私钥解密,反过来也一样。 假设 用户甲要寄信给用户乙,他们互相知道对方的公钥。甲就用乙的公钥加密邮件寄出,乙收到后就可以用自己的私钥解密出甲的原文。由于别人不知道乙的私钥,所以即使是甲本人也无法解密那封信,这就解决了信件保密的问题。另一方面,由于每个人都知道乙的公钥,他们都可以给乙发信,那么乙怎么确信是不是甲的来信呢?那就要用到基于加密技术的数字签名了。 甲用自己的私钥将签名内容加密,附加在邮件后,再用乙的公钥将整个邮件加密(注意这里的次序,如果先加密再签名的话,别人可以将签名去掉后签上自己的签名,从而篡改了签名)。这样这份密文 被乙收到以后,乙用自己的私钥将邮件解密,得到甲的原文和数字签名,然后用甲的公钥解密签名,这样一来就可以确保两方面的安全了。 八、加密技术的应用 加密技术的应用是多方面的,但最为广泛的还是在电子商务和 VPN 上的应用,下面就分别简叙。 1、在电子商务方面的应用 电子商务( E-business)要求顾客可以在网上进行各种商务活动,不必担心自己的信用卡会被人盗用。在过去,用户为了防止信用卡的号码被窃取到,一般是通过电话订货,然后使用用户的信用卡进行付款。现在人们开始用 RSA(一种公开 /私有密钥)的加密技术,提高信用卡交易的安全性,从而使电子商务走向实用成为可能。 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 许多人都知道 NETSCAPE公司是 Internet 商业中领先技术的提供者,该公司提供了一种基于 RSA和保密密钥的应用于因特网的技术,被称为安全插座层( Secure Sockets Layer,SSL)。 也许很多人知道 Socket,它是一个编程界面,并不提供任何安全措施,而 SSL不但提供编程界面,而且向上提供一种安全的服务, SSL3.0 现在已经应用到了服务器和浏览器上,SSL2.0则只能应用于服务 器端。 SSL3.0用一种电子证书( electric certificate)来实行身份进行验证后,双方就可以用保密密钥进行安全的会话了。它同时使用“对称”和“非对称”加密方法,在客户与电子商务的服务器进行沟通的过程中,客户会产生一个 Session Key,然后客户用服务器端的公钥将 Session Key 进行加密,再传给服务器端,在双方都知道 Session Key 后,传输的数据都是以 Session Key 进行加密与解密的,但服务器端发给用户的公钥必需先向有关发证机关申请,以得到公证。 基 于 SSL3.0 提供的安全保障,用户就可以自由订购商品并且给出信用卡号了,也可以在网上和合作伙伴交流商业信息并且让供应商把订单和收货单从网上发过来,这样可以节省大量的纸张,为公司节省大量的电话、传真费用。在过去,电子信息交换( Electric Data Interchange, EDI)、信息交易( information transaction)和金融交易( financial transaction)都是在专用网络上完成的,使用专用网的费用大大高于互联网。正是这样巨大的诱惑,才使人们开始发展因特网上的电子商务, 但不要忘记数据加密。 2、加密技术在 VPN中的应用 现在,越多越多的公司走向国际化,一个公司可能在多个国家都有办事机构或销售中心,每一个机构都有自己的局域网 LAN( Local Area Network),但在当今的网络社会人们的要求不仅如此,用户希望将这些 LAN连结在一起组成一个公司的广域网,这个在现在已不是什么难事了。 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 事实上,很多公司都已经这样做了,但他们一般使用租用专用线路来连结这些局域网 ,他们考虑的就是网络的安全问题。现在具有加密 /解密功能的路由器已到处都是,这就使人 们通过互联网连接这些局域网成为可能,这就是我们通常所说的虚拟专用网( Virtual Private Network , VPN)。当数据离开发送者所在的局域网时,该数据首先被用户湍连接到互联网上的路由器进行硬件加密,数据在互联网上是以加密的形式传送的,当达到目的 LAN的路由器时,该路由器就会对数据进行解密,这样目的 LAN中的用户就可以看到真正的信息了。 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 第四章 密码学简介 4 1 概念 (1) 发送者和接收者 假设发送者想发送消息给接收者,且想安全地发送信息:她想确信偷听者 不能阅读发送的消息。 (2) 消息和加密 消息被称为明文。用某种方法伪装消息以隐藏它的内容的过程称为加密,加了密的消息称为密文,而把密文转变为明文的过程称为解密。图 2-1表明了这个过程。 加密 解密明文 密文 原 始 明 文 图 2-1 加密和解密 明文用 M(消息)或 P(明文)表示,它可能是比特流(文本文件、位图、数字化的语音流或数字化的视频图像)。至于涉及到计算机, P是简单 的 二进制数据。明文可被传送或存储,无论在哪种情况, M指待加密的消息。 密文用 C表示,它也是二进制数据,有时和 M一样大 ,有时稍大(通过压缩和加密的结合, C有可能比 P小些。然而,单单加密通常达不到这一点)。加密函数 E 作用于 M得到密文C,用数学表示为: E( M) =C. 相反地,解密函数 D作用于 C产生 M D( C) =M. 先加密后再解密消息,原始的明文将恢复出来,下面的等式必须成立: D( E( M) =M (3) 鉴别、完整性和抗抵赖 除了提供机密性外,密码学通常有其它的作用: . (a) 鉴别 消息的接收者应该能够确认消息的来源;入侵者不可能伪装成他人。 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: (b) 完整性 检验 消息的接收者应该能够验证在传送过程中消息没有被修改; 入侵者不可能用假消息代替合法消息。 (c) 抗抵赖 发送者事后不可能虚假地否认他发送的消息。 (4) 算法和密钥 密码算法也叫密码,是用于加密和解密的数学函数。(通常情况下,有两个相关的函数:一个用作加密,另一个用作解密) 如果算法的保密性是基于保持算法的秘密,这种算法称为受限制的算法。受限制的算法具有历史意义,但按现在的标准,它们的保密性已远远不够。大的或经常变换的用户组织不能使用它们,因为每有一个用户离开这个组织,其它的用户就必须改换另外不同的算法。如果有人无意暴露了这个秘密,所有人都必须改变他们的算 法。 更糟的是,受限制的密码算法不可能进行质量控制或标准化。每个用户组织必须有他们自己的唯一算法。这样的组织不可能采用流行的硬件或软件产品。但窃听者却可以买到这些流行产品并学习算法,于是用户不得不自己编写算法并予以实现,如果这个组织中没有好的密码学家,那么他们就无法知道他们是否拥有安全的算法。 尽管有这些主要缺陷,受限制的算法对低密级的应用来说还是很流行的,用户或者没有认识到或者不在乎他们系统中内在的问题。 现代密码学用密钥解决了这个问题,密钥用 K 表示。 K 可以是很多数值里的任意值。密钥 K的可能值的范围叫做密 钥空间。加密和解密运算都使用这个密钥(即运算都依赖于密钥,并用 K作为下标表示),这样,加 /解密函数现在变成: EK(M)=C DK(C)=M. 这些函数具有下面的特性: DK( EK( M) =M. 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 有些算法使用不同的加密密钥和解密密钥,也就是说加密密钥 K1 与相应的解密密钥 K2不同,在这种情况下: EK1(M)=C DK2(C)=M DK2 (EK1(M)=M 所有这些算法的安全性都基于密钥的安全性;而不是基于算法的细节的安全性。这就意味着算法可以公开,也可以被分析,可以大量生产使用算法的产品,即使偷听 者知道你的算法也没有关系;如果他不知道你使用的具体密钥,他就不可能阅读你的消息。 密码系统由算法、以及所有可能的明文、密文和密钥组成的。 基于密钥的算法通常有两类:对称算法和公开密钥算法。下面将分别介绍: 4 2 对称密码算法 对称算法有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,反过来也成立。在大多数对称算法中,加 /解密密钥是相同的。这些算法也叫秘密密钥算法或单密钥算法,它要求发送者和接收者在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都能对消息进行加 /解密 。只要通信需要保密,密钥就必须保密。 对称算法的加密和解密表示为: EK( M) =C DK( C) =M 对称算法可分为两类。一次只对明文中的单个比特(有时对字节)运算的算法称为序列算法或序列密码。另一类算法是对明文的一组比特亚行运算,这些比特组称为分组,相应的算法称为分组算法或分组密码。现代计算机密码算法的典型分组长度为 64 比特 这个长度大到足以防止分析破译,但又小到足以方便使用(在计算机出现前,算法普遍地每次只对明文的一个字符运算,可认为是序列密码对字符序列的运算)。 4 3 公开密码算法 公开密钥算法(也叫 非对称算法)是这样设计的:用作加密的密钥不同于用作解密的密钥,而且解密密钥不能根据加密密钥计算出来(至少在合理假定的长时间内)。之所以叫做公开密钥算法,是因为加密密钥能够公开,即陌生者能用加密密钥加密信息,但只有用相应无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 的解密密钥才能解密信息。在这些系统中,加密密钥叫做公开密钥(简称公钥),解密密钥叫做私人密钥(简称私钥)。私人密钥有时也叫秘密密钥。为了避免与对称算法混淆,此处不用秘密密钥这个名字。 用公开密钥 K加密表示为 EK(M)=C. 虽然公开密钥和私人密钥是不同的,但用相应的私人密钥解密可表示为: DK(C)=M 有时消息用私人密钥加密而用公开密钥解密,这用于数字签名(后面将详细介绍),尽管可能产生混淆,但这些运算可分别表示为: EK(M)=C DK(C)=M 当前的公开密码算法的速度,比起对称密码算法,要慢的多,这使得公开密码算法在大数据量的加密中应用有限。 4 4 单向散列函数 单向散列函数 H(M) 作用于一个任意长度的消息 M,它返回一个固定长度的散列值 h,其中 h 的长度为 m 。 输入为任意长度且输出为固定长度的函数有很多种,但单向散列函数还有使其单向的其它特性: (1) 给定 M ,很容易计算 h ; (2) 给定 h ,根据 H(M) = h 计算 M 很难 ; (3) 给定 M ,要找到另一个消息 M 并满足 H(M) = H(M ) 很难。 在许多应用中,仅有单向性是不够的,还需要称之为 “ 抗碰撞 ” 的条件: 要找出两个随机的消息 M 和 M ,使 H(M) = H(M) 满足很难。 由于散列函数的这些特性,由于公开密码算法的计算速度往往很慢,所以,在一些密码协议中,它可以作为一个消息 M 的摘要,代替原始消息 M,让发送者为 H(M) 签名而不是对 M 签名 。 如 SHA 散列算法用于数字签名协议 DSA中。 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 4 5 数字签名 提到数字签名就离不开公开密码系统和散列技术。 有几种公钥算法能用作数字签名。在一些算法中,例如 RSA,公钥或者私钥都可用作加密。用你的私钥加密文件,你就拥有安全的数字签名。在其它情况下,如 DSA,算法便区分开来了 数字签名算法不能用于加密。这种思想首先由 Diffie和 Hellman 提出 。 基本协议是简单的 : (1) A 用她的私钥对文件加密,从而对文件签名。 (2) A 将签名的文件传给 B。 (3) B用 A的公钥解密文件,从而验证签名。 这个协议中 ,只需要证明 A的公钥的确是她的。如果 B不能完成第( 3)步,那么他知道签名是无效的。 这个协议也满足以下特征: (1) 签名是可信的。当 B用 A的公钥验证信息时,他知道是由 A签名的。 (2) 签名是不可伪造的。只有 A知道她的私钥。 (3) 签名是不可重用的。签名是文件的函数,并且不可能转换成另外的文件。 (4) 被签名的文件是不可改变的。如果文件有任何改变,文件就不可能用 A的公钥验证。 (5) 签名是不可抵赖的。 B不用 A的帮助就能验证 A的签名。 在实际应用中,因为公共密码算法的速度太慢,签名者往往是对消息的散列 签名而不是对消息本身签名。这样做并不会降低签名的可信性。 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 第五章 DELPHI介绍 4.1 Delphi历史回顾 Delphi是第四代编程语言,是 RAD( Rapid Application Development,快速应用程序开发)工具的代表。从核心上说, Delphi是一个 Pascal编译器。 Delphi 语言的发展历程如下: Delphi 1 1995 年, Borland推出了 Delphi 1。 Delphi 1提供了一种完全不同的开发 Windows程序的方式:可视化的开发环境、编译后的可执行软件、 DDL、数据库,以及可以毫无限制地给可视环境命名。而且 Delphi 1 是第一个综合了可视化开发环境、优化的源代码编译器、可扩展的数据库访问引擎的 Windows开发工具,它奠定了 RAD的概念。 Delphi 2 一年后的 Delphi 2在 32位的操作系统 Windows 95 和 Windows NT下实现了原有的一切功能。另外, Delphi 2还增加了许多 Delphi 1没有的功能,例如 32位的编译器能生成速度更快的应用程序,对象库得到进一步的丰富和扩展,完善了数据库支持,改进了字符串处理,支持 OLE对象链接与 嵌入和可视化窗体继承以及与 16位的Delphi兼容等。 Delphi 2 成为衡量其他 RAD工具的标准。为了满足 IT 产业的需要, Delphi 2增强了数据库和客户端 /服务器的功能。 Delphi 3 1997 年, Borland公司推出了 Delphi 3。 Delphi 3使本来极其复杂的COM、 ActiveX、 WWW应用程序开发、 “ 瘦 ” 客户应用程序、多层数据库系统体系结构等技术变得非常容易。虽然 Delphi 3与 Delphi 1 编写应用程序的基本方法大都相同,但 Delphi 3的 Code Insight(代码 内视)技术却简化了代码编写过程。 Delphi 4 1998 年推出的 Delphi 4 致力于使 Delphi更易于使用。 Module Explore(模块导航)技术的引入使程序员能够以一致的图形界面浏览和编辑代码。代码导航和类自动生成的功能使程序员只需关注应用程序本身,而不必在输入代码上花费太多精力。 IDE经过重新设计可支持浮动或可停靠的工具栏和窗口,调试器也做了改进。 Delph无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: i 4不愧为一个先进的开发工具,它的 MIDAS、 DCOM和 CORBA等技术使 Delphi 4的应用范围扩展到企业级用户。 D elphi 5 1999 年, Delphi 5推出。 Delphi 5 通过增加更多的功能使程序的编写更简单。新功能包括进一步增强了 IDE和调试器的功能、提供了 Team Source 小组开发软件和转换工具等。 Delphi 5 也为简化 Internet 的开发增加了许多新功能,包括 Active Server Object Wizard 用于创建 ASP, Internet Express 组件用于支持 XML和 MIDAS功能,使 Delphi成为 Internet的一个通用数据平台。 Delphi 6 Delphi 6 不但在传统 的开发能力方面持续改进,让程序员能够享有更具生产力的开发环境,而且对于最新的信息技术,例如 XML/XSL、 SOAP、 Web Service等也都有非常良好的支持,让程序员能够快速地使用这些新技术。此外, Delphi 6在核心运行时函数库以及编译器方面也有了不少改善,不但让程序员可以开发功能更强的窗口应用程序,也可以更平顺地移植到 Linux平台,再搭配跨平台的新可视化组件 Framework CLX,即使是 Windows 程序员也可以快速地开发 Linux平台上的应用系统。 然而,实际上 Delphi 7 之所以这么快 推出,很大原因上是由于 Delphi 6 的很多新特性还不是很成熟,在 Delphi 7中这些新特性得到了很大的改善和提高。下面,我们将会详细介绍 Delphi 6 和 Delphi 7共有的一些新特性。 4.2 Delphi 的新特性 1. 功能更强大的集成开发环境 和以往 Delphi的每一个新版本一样, Delphi 7 继续改善了开发环境,帮助程序员提高效率。 Delphi 7在集成开发环境中加入了很多让程序员爱不释手的新功能,下面是对它们的一个简单介绍。 ( 1) Code Complete(代码完成) 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: Code Complete功能在 Delphi 5中就已经加入了,这项功能非常受程序员的欢迎,因为 Code Complete可以大幅度地减少程序员需要键入的程序代码,并且减少键入错误。 Delphi 7的 Code Complete 功能在原有的基础上继续改善,新的 Code Complete 窗口不但可以由程序员自行调整大小,而且可以使用不同的颜色代表不同的对象,例如变量、方法和特性等。 Delphi 7 的 Code Complete窗口加入了色彩分析,以及对对象分门别类的能力。此外,新的 Code Complete 窗口也会更聪明地 过滤对象能够使用的 PME,避免了以往 Delphi 5的 Code Complete 窗口无法显示一些 PME的困窘。另外,程序员在新的 Code Complete窗口中选择使用某个方法之后, Code Complete会自动地在方法名称之后加上 “ (); ” 字符,把光标停在圆括号之中,并且自动显示这个方法需要的所有参数,Delphi的确比以前更聪明更方便了。 ( 2) Object TreeView(对象树视图) 另外一个新功能就是 Delphi 7的 Object TreeView 窗口。这个新的窗口除了可以显示窗体中所有的对 象之外,也可以以分层方式表达组件之间的关系。当程序员在 Object TreeView窗口中单击了一个组件之后,这个组件会立刻出现在对象查看器之中,这时程序员可以改变这个对象的特性值和事件处理程序。 当窗体复杂,拥有大量的组件时, Object TreeView 窗口可以让用户迅速找到这个组件,并且知道与当前组件相关的组件,非常方便。 此外 Delphi 7的编辑器也强化了 Class Complete 的功能,让程序员在定义类别程序代码时拥有更大的弹性,并且加强了 Interface Complete 的功能,让程序员在 撰写接口程序代码时也能够享有 Code Complete功能。 ( 3)可定制的 View 窗口 Delphi 7最强劲的集成开发环境功能应该要算是新的可定制的 View 窗口了。在 Delphi 7中,编辑器不但可以让程序员观看和编辑 Object Pascal的程序代码,而且如果程序员编辑的是 Web应用程序,那么还可以直接在编辑器中查看 HTML程序代码、脚本语无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 言程序代码,预览 Web应用程序执行结果的画面以及 Web应用程序产生的 HTML程序代码。 ( 4)新添加 Indy Intercepts 和 Indy I/O Handler 构件组 企业版的 Delphi 7 中,这两个构件组基本上提供了针对现今流行的 Internet协议编程的构件。可以进行更为底层的操作。 ( 5)新添加 IW Standard、 IW Data、 IW Client Side 和 IW Control 构件组 这些构件也是 Delphi 7 的显著改革之一,将 Intraweb集成到了标准的构件板中,我们就可以很方便地开发基于 Web的应用程序。 ( 6)新添加的 Rave 报表构件组 Delphi 7的标准构件板中已经没有了原来的 QuickReport构件组,取而代之的是 RAVE报表制作组件,并且提供专门的报表制作工具 Rave Designer。 Rave报表构件是一个可视化的报表设计工具,大大简化了在应用程序中加入报表的工作。用 Rave报表构件可以做出各种不同的报表,从最简单的到非常复杂、个性化的报表都可以完成。它的功能包括:图片支持、对齐、精确页面定位、打印机设置、字体控制、打印预览、报表内容重用,并支持 PDF、 HTML、 RTF等文本格式。 . 新一代数据存取引擎 DBExpress Borland为了让 Windows 平台上的 Delphi 以及 Linux平台上的 Kylix拥有共同的数据存取引擎,决定开发新一代的数据存取引擎,这就是 DBExpress。 DBExpress 是一组存取各种不同关联数据库的原生驱动程序,以及一组基于这些驱动程序而开发的统一的组件。由于原生驱动程序和组件的开发都考虑了跨平台,因此 Delphi 和 Kylix都可以使用这组驱动程序和组件。程序员通过统一的组件来存取不同的数据库,以方便开发数据库应用系统。 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 3. 开发 Internet/Intranet 应用系统的 WebSnap 组件组 Delphi 7 中最重要的新增功能之一应该要算是能够让程序员开发 Internet/Intranet应用系统的新架构和组件,这个新功能称为 WebSnap。 Delphi 7的 WebSnap允许程序员使用组件和可视化的方式快速开发复杂的 Internet/Intranet 应用系统。 WebSnap的特点是允许程序员直接在这些组件之中加入脚本语言,并且能够直接在 Delphi 的集成开发环境中撰写脚本语言、预览 Web应用程序的输出结果以及 Web应用程序产生的 HTML程序代码。 4. MIDAS 的进化版本 DataSnap 在 Delphi 7中, MIDAS 被改名为 DataSnap。 DataSnap不但强化了 MIDAS 原有的功能,更加入了许多新的组件,让程序员可以使用它开发出更为强劲的应用系统。此外 DataSnap也改善了 MIDAS的执行效率,让使用它的应用程序能够执行得更快。 5. 对 XML/XSL 的支持 Delphi 6的另外一个重要的改良就是对于 XML/XSL的支持。除了增加许多新的 VCL组件,让程序员不必使用低阶的 COM接口或是复杂的 API就可以轻易的处理 XML/XSL文件和资料之外, MIDAS 的资料更可以直接输出成 XML,或是把 XML的资料直接导入成 MIDAS的 Data Packet, Delphi 的程序员再也不需要为复杂的 XML程序设计伤脑筋了。 6. 开发 Web Service 的向导和组件 Web Service该是现在最热门的 Web技术之一了,不管是 IBM或是 Microsoft都在发展 Web Service的解决方案。 Delphi 6在这方面也不落后, Delphi 6 提供了 SOAP和 Web Service向导,让程序员能够快速地开发 SOAP 应用系统,也可以汇入 WSDL自动产生骨架程序代码。由于 SOAP 是未来 Web和分布式应用系统的主流技术,而 Web Service更是未来 Web应 用系统的主要软件架构,因此对于程序员来说,掌握这些技术非常重要。 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: Delphi 6是 Borland 支持 SOAP的第一个产品,由于 SOAP是标准的协议,因此通过Delphi 6开发的 SOAP 应用系统可以和 COM+、 EJB或是 Microsoft的 .NET 沟通, Delphi的程序员现在就可以使用它开发未来的应用系统。在 Delphi 6中也提供了 6个 VCL组件让程序员开发 SOAP和 Web Service的应用系统。 Delphi 6 允许程序员快速建立 SOAP应用程序和 Web Service。 总的来说, Delphi 6最主要的新功能是在 XML/XSL, Internet/Intranet 以及 SOAP和 Web Service方面的加强。同时为了跨平台的目的,在数据存取引擎、可视化组件架构和运行时期函数库方面也进行了大幅度的改善。至于在 BDE, ADO和 COM+方面则只有小幅度的进步。 当 Microsoft不再推出 VB/VC新一代版本的 Windows开发工具,而 Power Builder等其他 Windows开发工具也逐渐被淘汰之际, Delphi 6可以说是惟一最新的 Windows开发工具,也是最好的 Windows 开发工具。 如果你仍然需要在 Windows下开发应用系统,或是需要使用 /整合最新的信息技术,那么 Delphi 6 仍然是非常值得购买和升级的开发工具。 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 第六章 注册技术实现 一、注册源 在 WIN98/95 的保护模式下,要根据硬件信息形成注册码可不是 一件容易的事,在实模式下可通过硬盘端口 1F6H 和 1F7H 直接读取硬盘的序列号等信息作为注册的数据源 。还可以 利用 BIOS 中的主板序列号、 BIOS 版本序列号或主机出厂日期和标志等,完全可以作为注册码的注册源。如 ROMBIOS 中 F000H-FFFFH 区域 中就存在与硬件配置有关的信息,还 可以采集其它一处或几处主板等的信息作为注册码的生产基地。例如可根据F000H:FFF5H-F000H: FFFFH 中存放的主机出厂日期和主机标志值,产生应用程序的注册码。由于计算机产品的更新换代比较快,而且所有用户使用的计算机不可能配置都完全相 同,所以注册码产生的源也不会完全相同。而且这些硬件信息内容在任何操作系统下均完全相同,兼容性非常好,更不会因为操作系统的更新而造成注册功能失效。注册源确定之后,关键的问题就是共享软件安装程序如何采集注册源信息,并让用户将其返回 给开发者。最简单的方法就是将采集到的注册源信息经过位操作加密后存放到一个文本中,形成注册码的数据源资料。这个注册源数据串可稍长一些,但不宜过长,使用户能够通过电子邮箱、电话或信件顺利转给开发者为宜。 二、注册机 开发者得到用户提供的注册源数据之后,就需要利用注册机生成注册码并返回给用户。注册机利用既定的位操作和不可逆算法,形成用户比较容易操作的字符串注册码,注册码的长度一般为 8-16 位为宜,用户只需注册一次就可以长期使用,所以注册码的长度不会影响用户的注册操作。当然注册机的算法应与共享软件中的算法部分基 本相同。对于远程用户,注册机应该具有从 键盘 和内存两种取得注册源数据的功能,所以注册机的加密算法实际为两个分支:第一个分支是从 键盘 获取注册源数据后直接根据注册算法形成注册码的过程,是直接给远程用户反馈注册码的过程;第二个分支是直接从 ROM BIOS 中根据注册源算法取得注册源数据,再根据注册算法形成注册码的过程,是直接读取本地机注册码的。 用户得到注册码后,根据共享发布软件的注册方法进行一次注册,应用程序会自动将这个注册码存放到软件的特定位置处,当应用程序被他人拷贝到其它机器中去后,由于注册码因不同机器而异,所以应用程序的功能或使用次数仍然受限,要在其它机器中使用该应用程序,还必须进行重新注册,达到共享软件发布目的。同时由于注册源数据的算法和注册码算法均可因人而异,无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 因此这种方法非常可靠。注册机带参数时接受 键 盘输入注册源;不带任何参数时从本地机器内直接采集注册源数据。 三、注册码 当用户注册成功后,注册码就被写到共享软件的相应位置。这时共享软件必须对用户注册码进行实时检测与判断,才能实现注册限制功能。这时要求共享软件必须内部取得注册源数据,并利用注册机中相同的算法产生内部注册码。这就要求共享软件直接读取 ROM BIOS 的注册源信息,并在共享软件中需要限制的功能处增加注册码检测判断功能,这需要根据共享软件的实际需要、软件大小和实现的难易程度来确定限制的数量,使盗版者很难进行解密。这样既使计算机中多个共享软件使用相同的注册源,也不会发生注册冲突问题;既使是使用了相同的注册源数据,由于注册算法的不同注册码也不会相同;即使解密者知道注册算法的注册源地址,由于无法知道注册算法而且注册点遍布整个共享软件,也很难进行盗版。因此,这一注册方法使共享软件有效地跨越各种系统平台。要在共享软件内部产生注册码,必须在共享软件中读取 ROMBIOS 数据源内存数据。 WINDOWS 保护模式下必须利用段选择符方 法和 API 编程接口提供的函数才能实现: 1.AllocSelector(Selector) 分配一个与参数相同的空选择器 2.FreeSelector(Selector) 释放分配的选择器 3.SetSelectorBase() 设置选择器描述符物理起始地址 4.GetSelectorBase() 获取选择器描述符物理起始地址 5.SetSelectorLimit() 设置选择器描述符访问界限 6.GetSelectorLimit() 获取选择器描述符访问界限 其中函数 AllocSelector(Selector) 是保护模式下物理内存访问的关键, Selector 是分配空选择器的段寄存器模板,可以利用 Global Alloc()函数分配内存,再利用GlobalHandleToSel() 函数将内存句柄转换为相应选择器,内存单元访问结束后再利用GlobalFree() 释放分配的内存。最简单的方法就是将系统的数据段寄存器 _DS 直接作为模 板参数,这个参数在一般应用程序中完全可以正常使用。然后利用 Se tSelectorBase() 和SetSelectorLimit( ) 函数分别设置内存的物理起始地址和访问界限值,利用正常的指针操作 *pt=Value 和 Value=*pt 访问物理内存单元,访问结束后必须使用 FreeSelector() 函数释放分配的选择器,因为 WINDOWS 并不自动释放无用的选择器,而且系统的选择器共享资源无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 是非常有限,只有 8192 个供使用。根据以上原理及注册机中的注册源和注册码算法,就不难实现共享软件内部注册码函数: 四、注册点 共享软件内部注册码产生后,需要对抗盗版的注册 点的多少取决于共享软件的自身价值、开发者的加密深度和软件实现的复杂程度等诸多因素,同时这也决定了注册提示信息的显示频度,来套磁用户进行合法使用。但就笔者自身而言,至少应该将共享软件中实现难度较大、深受用户欢迎以及普遍使用的功能加上注册点。建议不同平台之间的注册码要分别设计注册算法和注册码。其代码示例如下: 注册点一: if(lpImeL- UseNum =0x3f80) if(ImeCmpKey()=0) sImeG.ZcFlag=TRUE; else sImeG.ZcFlag=FALSE; lpImeL- UseNum=0x0; else lpImeL- UseNum+=sImeG.iWord; 注册点二: if(ImeCmpKey()=0) sImeG.ZcFlag=TRUE; return; else sImeG.ZcFlag=FALSE; lpImeL- UseNum=0x0; 五、注册口 对于共享软件,不管其实现何种功能,最好采取再线注册方式,这样可以减少用户很多重复操作。同时应该采取多个注册入 口,如本人软件可以在增加或删除词组等时进行注无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 册,只要一处注册成功整个软件就算注册成功,并注意对注册口输入的注册码进行再加密处理。 结合以上的思路, 用 Delphi编写 共享 软件提取注册码及算出注册码 的小程序 ,给程序加入 注册 功能 ,让它变成一个 共享软件 ,然后把它放入主页 ,可 提供给用户 免费下载 ,从而帮助您获得更大的用户群。生成软件登录码生成一个稳定的且相对唯一的软件登录码 ,是 共享软件 赖以生存的基础 ,所以必须选择一个好的算法来生成软件登录码。 稳定的涵义是指生成的软件登录码仅与机器的某些固定配置有关 ,不会因用户的一些日常操作而改变。为叙述方便 ,本文仅采用了 C 盘总容量、 Windows安装时所输入的用户名、用户使用本软件时所提供的单位全称和用户姓名等信息 ,根据需要 ,还可加入硬盘物理参数、主板的标识等等。 以下生成软件登录码的代码 ,应放置于软件登录窗口的 生成登录码 按钮的OnClick事件代码中。 procedure TRegBox.BitBtn1Click(Sender: TObject); var users:pchar; i:integer; n1:longint; /n2:longint,s0,s1,s2,s3:string 定义为全程变量 begin i:=255; getmem(users,255); /分配内存空间 getusername(users,i); /获得 Windows用户名 s1:=trim(Edit1.Text); /用户输入的单位全称 s2:=trim(Edit2.Text); /用户输入的用户姓名 s0:=jdk +users +ue28; /避免用户名太短 freemem(users); /释放内存空间 s1:=s2 +xwplskf +s1 +ruieo; /合成单位全称和用户姓名 n1 := DiskSize(3) div 1024 ; /C 盘总容量 n2 :=1 ; 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: for i:=1 to length(s1) do /登录码与 s1相关联 n2:=abs(ord(s1i) n2 + f77) mod 1000000; for i:=2 to length(s0) do /登录码与 s0和 C盘容量相关联 n2:=abs(ord(s0i) n2 +n1) mod 1000000; /下面的转换生成 8位数字的登录码 n2 n2:=10504007 +abs(n2 +n1) (length(s1) +length(s0); Edit4.text:=copy(inttostr(n2),1,8); n2:=strtoint(copy(inttostr(n2),1,8); end; 生成 注册 密码 有了登录码 ,还需要一个单独的程序 ,采取一定的算法来加密登录码 ,生成一个 注册密码 ,加密算法的强度越大越好。这个单独的程序即为电子 注册 密码生成程序 ,当然它不能提供给任何用户 ,但需要在提供给用户使用的 共享软件 中 注册 按钮的 OnClick事件中 ,写入等价的代码 ,以判断用户自己输入的 注册 密码是否正确。 procedure Tencodeform.Button1Click(Sender:TObject); var n2:longint; s1,s2,s4:string; i:integer; begin n2:=strtoint(Edit1.text); / 用户反馈的软件登录码 n2:=120873762 +abs(n2 div 133) 171 xor 39639421); s1:=copy(inttostr(n2),1,8); s2:=73461852; s4:=; /s4 : 由 n2 变换生成的 注册 密码 for i:=1 to 8 do s4:=s4 +s1ord(s2i) ord(1) +1 ; / 在 Edit2 编辑框显示生成的 注册 密码 , 将它告诉申请的用户 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: Edit2.text:=s4; end; 注册 用户通过单击 注册 按钮 ,来实现软件的 注册, 这一段代码要完成以下功能 : 程序自动生成的 注册 密码 ; 用生成的 注册 密码与用户输入的 注册 密码进行核对 ; 如果一致 ,则关闭 注册 菜单项 ,并在缺省目 录下创建一个 注册 文件 ,这个文件包括以下内容 : USER 单位全称、用户姓名、电话号码、 CODE 注册 码 =XXXXXXXX 注册 按钮的 OnClick 事件代码如下 : procedure TRegBox.BitBtn2Click(Sender: TObject); var myfile:textfile; i:integer; begin s5:=trim(Edit5.text); /s5=用户输入 注册 密码 /以下代码对 n2 进行变换生成 注 册 密码 n2:=120873762 +abs(n2 div 133) 171 xor 39639421); s1:=copy(inttostr(n2),1,8); /8 位数字 s2:=73461852; /移位变换 s4:=; /s4=程序自动生成的 注册密码 for i:=1 to 8 do s4:=s4 +s1ord(s2i) ord(1) +1 ; if strtoint(s4) 7strtoint(s5) 7 then begin MainBox.r2.Visible:=True; /打开 注册 菜单 Edit4.Text:=; /清空登录码 Edit5.Text:=; /清空 注册 密码 MessageDlg(注册 码不对 ,请核对后再 注册 ! , mtWarning, mbOk, 0) 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: end else begin /注册 成功后 ,创建一个 注册 文件 MainBox.r2.Visible:=False; assignfile(myfile,wps2word.log); rewrite(myfile); writeln(myfile,ERIS); writeln(myfile,单位全称 =,trim(Edit1.Text); writeln(myfile,用户姓名 =,trim(Edit2.Text); writeln(myfile,电话号码 =,trim(Edit3.Text); writeln(myfile,CODE); writeln(myfile,注册 码 =,s4); closefile(myfile); MessageDlg (注册 码成功 ,谢谢您使用本软件! , mtWarning, mbOk, 0) end; end; 判断软件是否 注册 判断软件是否 注册 的代码应放在应用程序主窗口的 OnCreate事件中 ,在这一段代码中 ,主要完成以下功能 : 判断软件 注册 文件是否存在及是否符合规范 (可能被用户误修改 ); 从 注册 文件中读取 注册 密码及程序自动生 成 注册 密码所需要的信息 ; 如果两者一致 ,则置 注册 成功标志 ,关闭主菜单中的 注册 菜单项 ,否则 ,打开 注册 菜单项。 procedure TMainBox.FormCreate(Sender: TObject); var s0,s1,s2,s3:string; /s4,s5:string 为全程变量 n1,n2:longint; myfile:textfile; users:pchar; i:integer; 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: begin if not fileexists(wps2word.log) then begin /不存在 注册 文件 ,则没有 注册 r2.Visible:=True; /允许 注册 菜单项 Randomize; /初始化随机数序列 n1:=random(100000000); /产生一个 8位以内的整数 s4:=inttostr(n1); /假设输入的 注册 密码为 s4 s5:=inttostr(n1 +7) /假设程序生成的 注册 密码为 s5,令 s4s5 end else begin /存在 注册 文件的处理 assignfile(myfile,wps2word.log); reset(myfile); /读取用户 注册 信息及 注册 密码 if not eof(myfile) then readln(myfile,s0); if not eof(myfile) then readln(myfile,s1); if not eof(myfile) then readln(myfile,s2); if not eof(myfile) then readln(myfile,s3); if not eof(myfile) then readln(myfile,s4); if not eof(myfile) then readln(myfile,s5); closefile(myfile); if (length(s1) 10) or (length(s2) 10) or (length(s3) 10) or (length(s5) 15) then begin /文件格式有误 ,则删除 注册 文件 ,并退出 deletefile(wps2word.log); r2.Visible:=True; /允许 注册 菜单 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: Exit; /退出 end; i:=255; getmem(users,255); getusername(users,i); /获得 Windows用户名 s0:=jdk +users +ue28; /避免用户名太短 freemem(users); s1:=trim(copy(s1,10,length(s1) 9); /单位全称 s2:=trim(copy(s2,10,length(s2) 9); /用户姓名 s5:=trim(copy(s5,8,length(s5) 7); /注册 密码 (待核对 ) s1:=s2 + xwplskf +s1 +ruieo; /合成单位全称和用户姓名 n1 := DiskSize(3) div 1024 ; /C 盘 信息 n2 :=1 ; for i:=1 to length(s1) do n2:=abs(ord(s1i) n2 + f77) mod 1000000; for i:=2 to length(s0) do n2:=abs(ord(s0i) n2 +n1) mod 1000000; n2:=10504007 +abs(n2 +n1) (length(s1) +length(s0); n2:=strtoint(copy(inttostr(n2),1,8); /登录码 /以下部分生成 注册 密码 n2:=120873762 +abs(n2 div 133) 171 xor 39639421); s1:=copy(inttostr(n2),1,8); s2:=73461852; /移位变换 s4:=; /S4为程序自动生成的 注册 密码 for i:=1 to 8 do s4:=s4 +s1ord(s2i) ord(1) +1 ; 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: /核对 注册 文件和自动生成的 注册 密码是否致 if strtoint(s4) 7=strtoint(s5) 7 then r2.Visible:=False /一致 else begin / 不一致 deletefile(wps2word.log); /删除 注册 文件 r2.Visible:=True; /允许 注册 菜单项 end; end; end; 开放和限制部分功能方法 采取核对程序自动生成和用户输入的 注册 密码是否一致 ,并检查 注册 菜单项是否允许的方 式 ,在应用程序的功能代码中判断是否已经 注册 ,以控制程序的流向。 if(r2.Visible=True)or(strtoint(s4) 7strtoint(s5) 7)and( 其他条件 )then 未 注册 时的处理 else 成功 注册 时的处理。 至此 ,本文仅讨论了限制软件使用功能的 共享软件 的编写方法 ,如果想限制软件使用时间 ,在软件 注册 标志中还应包括第一次安装的时间 ,并且 注册 标志不能简单地写入一个文件 ,它应隐藏在硬盘或 注册 表的某一特定位置 。 关于硬盘序列号: 在微软的操作系统中,硬盘的磁盘序列号是在硬盘分区后系统产生的 8 字节随机数字,理论上有重复的可能 ,但实际上找到两个相同的分区序列号很难,因此,在实际应用中可以把硬盘序列号作为唯一识别码用于我们的加密系统,实际应用中可以对序列号做几次逻辑运算,让别人觉得不是磁盘序列号。注意,软盘也有磁盘序列号,是在格式化后产生的,当进行磁盘复制时,两个磁盘的序列号也被复制为一样的。因此,不能利用软盘的序列号进行加密。当然,硬盘也可以用 GHOST 等软件克隆,但是为了使用某个软件而去克隆整个硬盘的情况是极少发生的。注册时,调用 CreateLock()得到机器的识别号(密码锁) ,在应用程序中无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 显示给用户 , 用户得到该序列号后通知软件作者 (作者一定得留下联系方法 ),作者根据密码锁利用解密机得到密匙 ,通过网络或电话送给用户,用户根据密匙注册,注册后应用程序把密匙写进 Windows 注册表,以备 TestKey( x)函数检测密匙用。 - 以后应用程序每次运行都要调用 TestKey(x)函数 (其中 x=密匙 ),用于检测密匙是否正确 ,正确返回非零值(合法用户) ,程序继续运行 ,否则(非法用户)退出程序。当输入正确的密匙 ,将显示 ”合法用户 ”,否则显 示 ”非法用户 ”,并退出程序 . 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 第七章、功能设计 调试环境的配置说明 安装组件: component-install component 在 install component 窗体下按 Browse 按钮在 RegModule文件夹下选择 Regware2.pas单元后,按 OK 运行:注册机的使用 添加 使用者姓名(大于 3个字符)及校验码(注册人姓名可以忽略) 按“生成注册码”在注册码框内会显示生成的 注册码 图 6-1注册机实现 流程图 注册机实现 按照算法计算 用户输入 使用者姓名 生成注册码 校验码 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 图 6-2 用户注册实现流程图 在 DELPHI中安装并注册 TRegwareII 类 在 HKEY_LOCAL_MACHINESoftwareCLASSESCLSID + FProgGUID + InprocServer32 的 ThreadingModel子键数据中添加 FLicense := License;/注册者 FOrganization := Organization;/组织 FRegCode := RegCode;/注册码 获取磁盘序列号 生成校验码 用户端注册过程 按照算法计算 读取注册表数据 是否保存注册数据 用户输入 未保存 保存 使用者姓名 取得注册码 生成注册码 比较是否相等 相等 -注册成功 不相等 -注册不成功 按照算法计算 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: FExpireTime := ExpireTime;/注册时间 FRegVersion := RegVersion;/注册版本号 FLastCountDown := LastCountDown;/使用天数 注册码的计算: DSN=硬盘物理序列号 uesrname=注册者名称 reg=(DSN)前 1/2+uesrname+(DSN)后 1/2 然后计算 reg所有字符的和 sum=sum+ (FSeed - 1113 mod Ord(regi);) 将 使用者姓名 及注册码添加到要注册的程序中注册即可。 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 第八章 详细设计 1 在应用软件主目录(假设为 C:Register)下创建两个子目录,分别命名为 Login 和Data。 2 从 Delphi 的 Tools 菜单中启动 Database Desktop,并选择 Tools/AliasManager .创建一个新别名。方法是:在 Alias Manager 对话框中点 New,给出新别名 UserInfo,并指向C:RegisterData 目录,按 Keep New、 OK 等按钮 保存新别名。 3 利用 Database Desktop 创建 Paradox 5.0 for Windows 数据表 Users.DB,结构见表 1。事实上,对于商业软件还需要更多的域。 表 1 表 Users.DB 的结构 域名类型大小关键字说明 Name A 16 * 用户名 Password A 16 * 注册口令 Fullname A 32 用户全名 Group I 用户组号 Enabled L 注册允许 4 设定 Name, Group 和 Enabled 为非空域 (Required Field), Group 的最小值为 0,最大值为 3,默认值为 3, Enabled 的默认值为 True。用户组 0 为系统管理员,可进行几乎任何操作;用户组 1 为软件操作人员,可进行除用户帐户管理以外的操作,包括建立和删除数据;用户组 2 为普通用户,可使用系统资源,无修改权限,而用户组 3 仅可浏览系统有限信息。 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 5 用口令 UserPassword 保护 Users.DB 表 , 存于 Data 目录下。利用 Database Desktop 向表中输入若干样本用户(见表 2),然后关闭 DatabaseDesktop。 表 2 表 Users.DB 的样本用户 Name Password Fullname Group Enabled Supervisor AAAAAA Super User 0 True Director BBBBBB Director User 1 True Guest 3 True User1 CCCCCC General User1 1 False User1 DDDDDD General User1 2 True User2 EEEEEE General User2 3 True 表 2 显示,允 许同一用户以不同身份(用户组)登录进入系统,享有不同的权限。如用户 User1,以不同密码登记,分属用户组 1 和 2。 6 返回 Delphi IDE,新建项目 Register.dpr 并存入 C:Register 目录,主窗体单元命名为 Main.pas。用户注册成功后,方能启动主窗体进入系统。本系统仅显示用户信息及登录的日期和时间以表示注册成功(见图 5),并不做其它任何事情,这里便是读者应用系统的接口。为此,在主窗体上放入一个 TGroupBox 组件, TLabel 和 TEdit 组件各五个。将所有 TEdit 的Text 属性清空, ReadOnly 属性值设为 True,窗体和组件其余属性按表 3 设置。 7 创建主窗体的 OnActivate 事件处理程序,登录成功并激活主窗体时执行,显示用户信息、登录日期和时间。过程如下: procedure TMainForm.FormActivate(Sender: TObject); begin if Time =StrToTime(12:00:00) then Caption:= 上午好,您已成功登录! else 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: Caption:= 下午好,您已 成功登录! ; / 显示登录用户信息、登录日期和时间 NameEdit.Text:=LoginUser.UserName; FullNameEdit.Text:=LoginUser.UserFullName; GroupEdit.Text:=IntToStr(LoginUser.UserGroup); DisplayDateEdit.Text:=DateToStr(Date); DisplayTimeEdit.Text:=TimeToStr(Time); end; 表 3 主窗体中组件属性设置 组件属性设 置 Form1 Caption Name MainForm Position poScreenCenter GroupBox1 Caption 用户信息 Label1 Caption 用户名称: Label2 Caption 用户全名: Label3 Caption 用户组号: Label4 Caption 登录日期: Label5 Caption 登录时间: Edit1 Name NameEdit Edit2 Name FullnameEdit Edit3 Name GroupEdit Edit4 Name DisplayDateEdit Edit5 Name DisplayTimeEdit 8 数据模板。选择 File/New Data Module 建立数据模板 LogDataModule,放入一个Ttable 组件,如图 1。属性按表 4 设置,命名其单元为 MD.pas,存入 Login 目录。 表 4 数据模板中组件属性设置 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 组件属性设置 Table1 DatabaseName UserInfo Name UsersTable TableName Users.DB 9 创建注册窗体。选择 File/New Form 创建一个新窗体,并加入组件 TLabel、 TEdit 和TbitBtn 各两个。窗体和组件属性按表 5 设置,命名其单元为 Login.pas,存于 Login 目录。 表 5 注册窗体中组件属性设置 组件属性设置 Form2 ActiveControl UserNameEdit Caption 请注册 Name LoginDialogForm Position poScreenCenter Label1 Caption 用户: Label2 Caption 密码: Edit1 Name LoginNameEdit Text Edit2 Name PasswordEdit PasswordChar * Text BitBtn1 Caption 注册 (&L) Enabled False Kind bkOK Name LoginBitBtn BitBtn2 Caption 取消 (&C) Enabled True Kind bkCancel Name CancelBitBtn 无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 10 选择 File/New 命令,从 New Items 的 New 页中选择 Unit 项建一个无窗体单元Addition.pas 存入 Login 目录,在其 interface 段输入下列语句: uses Classes, Forms, Sysutils; type TApplicationUser=class(TComponent) private FUserName: string; FFullName: string; FUserGroup: Integer; public property UserName: string read FUserName write FUserName; property UserFullName: string read FFullName write FFullName; property UserGroup: Integer read FUserGroup write FUserGroup; e

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论