- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
软件是个人智慧的结晶,凝结了自己的血汗。好不容易编写了一个属于自己的?软件,希望让别人共享自己的成果,希望别人能记住自己的大名,更希望别人能对?自己的软件提出宝贵意见,同时也希望使自己可以方便地提供最新版本的软件给对?自己的软件十分关心的用户,当然也要防止盗版(因为我们反对盗版)。这一切都?可以用用户注册的方式解决。? 谈到注册,便立即联想到注册码,但如何生成注册码,对于软件的设计者是一个十?分关键的问题。首先,注册码需要有随机性,即注册码的生成每一次都不一样。其?次,注册码需要有特定性,即注册码对于同一用户是一样的或是功能相同的。再次?,注册码要有保密性,即不易被他人查到并破解。基于注册码的这种特点,首先就?需要有一种合理的设计思路。? 笔者所用的是一种明码——密匙——暗码的加密思路。具体说来:当加密时,先取?一字符串作为明码(原码),再另取一字符串作密匙,利用某种算法(如常用的伪?随机数加密算法)将这两段字符串进行变换及运算,从而获得另一字符串(暗码)?,再将暗码和密匙用文件保存起来,这样就不怕别人偷看了;当解密时,将密匙和暗?码利用另一种解密算法进行变换和运算,还原得到明码。? 这种方法的关键在于利用密匙和暗码能还原唯一的明码,而对于不同的用户应该有?不同的明码和密匙,且密匙必须是唯一的(对于同一用户)。如果以上几点无法满?足,将无法生成有效的注册码,切记切记!!!?下面用以上思路来设计我们自己的注册码:? 首先,选择原码。当然选择注册的用户的用户名(最好是英文)来做注册码的原码?,是一个很好的办法,推荐用英文的理由是:英文字符串比中文字符串在运算中容?易控制,且不易出错;其次,选择密匙,按照密匙对于不同用户是不同且唯一的原?则,我强烈建议选择硬盘的序列号作为密匙。因为从理论上讲一个硬盘的序列号是?唯一的,而且不同分区的序列号也不相同。所以,我用硬盘上的C驱动器分区的序?列号来做密匙。因为C区好像每台电脑上都有(什么?你没有?我倒!!!);再?次,就是选择暗码了。当然了,暗码应该是由你利用以上思路做成的注册器来生成?,并作为注册码寄给用户的啦^-^,有关注册器的设计待会儿再说。? 理解了以上的注册码生成的思想后,下面就利用Micosoft 的Visual Basic6.0来完?成这项设计工作。需要利用几个Windows的API函数:GetVolumeInformation用以获?得硬盘的序列号、GetPrivateProfileString、WritePrivateProfileString用来读?写INI文件。对于以上三个API函数的使用不作介绍了,现将其声明如下:?Private Declare Function GetVolumeInformation Lib ″kernel32″ Alias ″?GetVolumeInformationA″ (ByVal lpRootPathName As String, ByVal?lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long,?lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long,?lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal?nFileSystemNameSize As Long) As Long Private Declare Function?GetPrivateProfileString Lib ″kernel32″ Alias ″?GetPrivateProfileStringA″ (ByVal lpApplicationName As String, ByVal?lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As?String, ByVal nSize As Long, ByVal lpFileName As String) As Long?Private Declare Function WritePrivateProfileString Lib ″kernel32″?Alias ″WritePrivateProfileStringA″ (ByVal lpApplicationName As String,?ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As?String)
文档评论(0)