共享软件注册部分的简单实现

目前,很多共享软件中使用注册码来实现对软件的保护。所谓注册码,就是一组与用户的某些特定信息(如用户名称、计算机硬件等等)相关的字符串。由于注册码传输起来比较简单,同时容易验证(相对于磁盘、光盘指纹等),因此现在注册码的应用越来越广泛,甚至一些商业软件,如Windows XP也使用了类似的机制(Microsoft称为Windows Product Activation)。

谈起注册码,就不能不提注册器。注册器是用来产生注册码的程序,其计算逻辑通常与受保护的应用程序一致。通过与受保护应用程序相同,或预先约定的计算逻辑得到的注册号,将决定受保护应用程序的行为,如显示“软件未注册”、禁用某些功能,或在“关于”对话框中显示注册者的姓名,等等。

其中,最终用户通过某种方式提交其注册信息,例如他(或他所在的组织)的名字,甚至极端一些,提供某些可以确定某人身份的信息,如Pentium III CPU的CPU ID,硬盘的序列号,网卡的MAC地址等等。然后,注册服务器,或呼叫中心的服务人员根据用户提供的信息,计算一个注册号,并告诉最终用户。

通常,由于人工操作可能造成差错,我们希望注册过程由计算机自动实现。不过这就带来了一个问题:用户凭什么相信我们的程序并不会泄漏他的个人隐私呢?针对这一问题,目前流行的做法是提供若干选项,其中包括电话注册,网络注册,以及平信注册等等,并把程序提交的内容告知用户。

此外,某些与用户的电脑相关的信息,如配置等等,不宜使用明文传送。这一方面是由于用户可能不愿意将这些信息透露给我们,另一方面是以明文传送信息可能会导致第三方(如cracker)截获信息。目前比较流行的方法是把那些我们并不需要,但却决定用户身份的信息用某种散列算法进行编码然后再发送。当然,在发送过程中我们可以使用SSL加密,或者其他一些方法来保证安全,由于与本文的主要内容关系不大,在此不赘述,读者可参考相关书籍。

需要保密的用户信息→ 散列算法 → 安全传输(如SSL) →服务器

就笔者个人的经验,计算注册码和验证注册码使用不同的算法,可以在一定程度上提高注册过程的安全性。当然,任何安全措施都不可能保证不被解密,“世界上没有打不开的锁”,解密只是一个时间问题,在构造注册码算法的时候,只要让解密代价大于软件价值即可,不必做得太复杂。

作为用户而言,无论是用什么注册方式,他都不希望过于复杂。通过计算机直接注册的方式无疑是最方便的,但很多用户可能不愿意这样做。作为用户来说,通过电话注册这种方式,说出自己的注册ID(通常包括了产品ID、用户的名字等信息),以及输入注册码应该是各种注册方式中最麻烦的一种。

注册ID和注册码应该具有以下特点:

(1)便于辨认、输入。注册码不是密码,没有必要是用大量的特殊符号、大小写组合。因此,注册码和注册ID中不应该包含不同大小写的字母,以及容易混淆的数字(1-I,0-O,2-Z)。

(2)具有查错能力。统计证明,输入注册码时,错序(如把1234输入成1243)、击键错误是最常见的错误。比较常用的方法是把注册码分成若干节,每节包括一个校验码,这样注册码就具有查错能力了。

为了体现上面的要求,我构造了一个这样的算法:

(1)计算输入的用户名,并按照下面的规则计算和:

设结果为a,预置为0

按顺序取用户名字符串的每一个字符的ASCII值,乘上位号,累加到a上。

例如:

J a s o n   L i

1 2 3 4 5 6 7 8

这样,a=(char)’J’+((char)’a’)*2+((char)’s’)*3+...

时间: 2024-08-03 19:38:50

共享软件注册部分的简单实现的相关文章

“闪播”网络,无需注册、操作简单,视频浏览更流畅

近日,途经北京首都国际机场.广州白云机场和重庆江北机场的旅客可利用手机.电脑及机场多媒体亭触摸屏搜索并登录闪播网,体验丰富且免费的新闻咨询.奥运视频在线观看.电子书浏览.音乐试听等应用,充分享受"忙里偷闲"的乐趣. 无需注册.操作简单,视频浏览更流畅 基于户外空间网络信号不稳定.大流量应用不流畅,以及越来越多的都市人在公共出行过程有使用无线网络的习惯,我们了解到,途径机场的旅客只需通过随身携带的智能手机.平板电脑或笔记本电脑搜索并连接机场无线网络(AIRPORT_WIFI_FREE)后

对注册表进行简单的操作

近来由于需要在自己写的程序中对注册表进行操作.总结些经验,并做个一个DEMO供日后使用,现在把它拿出来和大家分享-- 小弟初学VC,有误之处还请赐教. 为了使用方便,我把一些操作写成了函数,以便方便调用,具体代码如下所示: 一.定义 HKEY hKey; char content[256]; //所查询注册表键值的内容 DWORD dwType=REG_SZ; //定义读取数据类型 DWORD dwLength=256; struct HKEY__*RootKey; //注册表主键名称 TCHA

Windows2003下预防DDos攻击的注册表设置简单教程

Windows Registry Editor Version 5.00  代码如下 复制代码 [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters] ;启动SYN攻击保护 ================= ;缺省项值为0,表示不开启攻击保护,项值为1和2表示启动syn攻击保护,设成2之后安全级别更高. ;对何种状况下认为是攻击,则需要根据下面的TcpMaxHalfOpen和TcpMaxHalfOpenRetried

开发手记(六)——共享软件注册程序编写实例(2)

-为保证文章完整性,谢绝对某篇而非全部手记的转载(mi6236) Option Explicit Private Declare Function GetVolumeInformation Lib "kernel32" _ Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, _   ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSiz

开发手记(六)——共享软件注册程序编写实例(3)

Microsoft公司在Windows NT3.51开始提出了注册表(Registry)的概念.注册表是Windows的一个重要组成部分,它保存了Windows中的各种配置参数.Windows的各个功能模块和安装的应用模块,在启动时都要读取注册表的信息,并根据这些参数来设置自己的运行环境,我们就可以把注册信息写入注册表来实现程序的共享注册.在VB中,有两种方法可以访问注册表:第一种是使用VB提供的函数: Private Sub Command1_Click() Dim KeyName as St

你知道注册表背后有多少秘密吗?

注册表背后的秘密 注:本文仅适用于Win9x系统 序:windows注册表方面的文章已经有好多,但是其中更多的内容还是很多windows注册表的技巧,很多用户都是"知其然不知其所以然",而且很多的技巧所涉及的键和键值根本不为人所知的.这样并没有对注册表有一个系统的介绍.下面这篇文章参考了Shrishail Rana的相关文章<Mystery Behind Windows Registry>,加上本人使用注册表的一点经验,分三个部分:注册表和它的用途,注册表的结构,注册表的问

Filter的注册2

  既然Filter是一种COM组件,使用前就必须先注册.Filter的注册程序为regsvr32.exe (位于操作系统目录的system32子目录下).假设现在有一个Filter文件,它的完整路径为C:/DSFilters/myFilter.ax,那么注册这个Filter的方法为:在命令行状态下,执行regsvr32 C:/DSFilters/myFilter.ax.随后会弹出一个对话框,告诉Filter注册是否成功.          提示: 注销Filter也是使用regsvr32.ex

一步一步教你用JS和INF编辑注册表

js|注册表 JScript小知识:JScript是一种解释型的.基于对象的脚本语言.尽管与C++这样成熟的面向对象的语言相比,JScript的功能要弱一些,但对于它的预期用途而言,JScript的功能已经足够大了.JScript程序是语句的集合,一条Jscript语句相当于英语中的一个完整句.Jscript语句将表达式组合起来,完成一个任务.一条语句由一个或多个表达式.关键字或者运算符(符号)组成.典型地,一条语句写一行,尽管一条语句可以超过两行或更多行.两条或更多条语句也可以写在同一行上,语

解决DLL组件注册成功但无法使用的问题

解决|问题|组件注册 一个很简单的问题,但是研究半天,给出标准答案,XP或2003下如FSO,在NTFS格式下Regsvr32 %systemroot%\system32\scrrun.dll如果注册成功,但ASP中依然无法使用先看scrrun.dll在NTFS格式下的权限,看是否加入user组中,如没有请用下命令cacls %systemroot%\system32\scrrun.dll /d guests而在FAT32格式下面,因为没有文件权限,无需要上面的步骤而注册表中依然有用户权限请查看