- UID
- 210100
- 积分
- 0
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2005-1-10
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
在Lisp中读网卡进行加密的方法及程序示例
1、由于网卡的物理地址是唯一的,我们可以使用这个卡号进行软件加密,相当于将网卡当作一般的加密狗
2、软件在别的客户的机器上安装后,读出他的机器上的卡号,由这个卡号外加一个附加代码(12位)生成一个密码,将此密码再输入到客户的机器中进行注册,注册信息是写在注册表中的
3、在运行过程中,读出卡号并算出密码,将这个密码与注册表中的密码进行比较,如果比较成功就是正版的,如果不成功就不是正版的
以下是完全的Lisp代码,在AutoCAD2000下运行通过,运行前要load相应的MyPass.Arx
1、读网卡号作为机器码
(defun C:read_computer_code( / PCCode)
(setq PCCode (strcat "The Computer Code is: " (read_computer_code)))
;read_computer_code是MyPass.Arx中的程序,它会返回机器的网卡物理号
(alert PCCode)
(princ)
)
2、生成密码,以下这段代码不要安到客户的机器上,安在开发者自已的机器上提供注册用
(defun C:MyCreatePassword( / PCCode ADcode MPass)
(setq PCCode (GETSTRING "\n Please input the computer code:\t"))
;;PCCode是客户机器上读出的机器码
(setq ADCode (GETSTRING "\n Please input the Additional code (12digit) such as \
123456789123\n The Additional code must be same as you have wrote in the software\
sent to your client\t:"))
;;ADCode是用来生成密码的,一定要确保在客户的机器上也使用了相同的ADCode
(setq MPass (create_product_password ADCode PCCode))
(alert (strcat "the Password for this PC-Code is : " MPass))
(PRINC)
)
;;生成的密码有24位,很难被破解
3、在客户机器上进行注册
(defun C:MyRegit( / MyPassword rr1)
(setq MyPassword (GETSTRING "\n Please input the Password:\t"))
;;这个Password就是上一步生成的24位的密码
(setq rr1 (vl-registry-write "HKEY_CURRENT_USER\\MyCAD" "" MyPassword))
;;write Password to 注册表
(if (= rr1 NIL)
(alert "can't regit")
(Princ "regit ok")
)
(princ)
)
4、在运行过程中验证用户是否是合法的
(defun C:MyCertify( / PCCode RPass CPass AddCode)
(setq AddCode "123456789123")
(setq PCCode (read_computer_code))
(setq CPass (create_product_password AddCode PCCode))
(setq RPass (vl-registry-read "HKEY_CURRENT_USER\\MyCAD" "")) ;read from regit
(princ RPass)
(if (= RPass CPass)
(princ "certify OK")
(PRINC "not certified")
)
)
5、在MyPass.arx中主要有两个function
read_computer_code(读出网卡物理号)
create_product_password AddCode PCCode(产生密码)
实际上也可以只用前面一个function,得到网卡号以后再自行写加密的算法,后面一个function就可以不用了 |
|