社区
非技术版
帖子详情
求PB的给自己的程序增加注册机制的源代码
Goshawkx
2004-01-14 05:29:00
自己用pb做了个程序,想增加注册码机制来控制一下。
哪位高手能赐予pb的代码。非常感谢。
...全文
57
7
打赏
收藏
求PB的给自己的程序增加注册机制的源代码
自己用pb做了个程序,想增加注册码机制来控制一下。 哪位高手能赐予pb的代码。非常感谢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ld2099
2004-01-18
打赏
举报
回复
不过还存在一些问题,
1、可通过下载一个dll文件来取序列号
2、这个源码不是很好。作者在98下能够运行,而我在2000下运行就会出错,而且对字母也无效。
ld2099
2004-01-17
打赏
举报
回复
huoyan21(hy) 的代码很好。
ld2099
2004-01-16
打赏
举报
回复
学习!
Goshawkx
2004-01-15
打赏
举报
回复
好
我先试试。
huoyan21
2004-01-14
打赏
举报
回复
// 以下参数由RSA加密算法得来
integer li_e, li_d, li_n
li_e = 3 // 设置指数e,加密密钥
li_d = 7 // 设置指数d,解密密钥
li_n = 33 // 设置N:两个素数得乘积
string ls_str
ls_str = Trim(sle_1.text) // 将明文转换成字符串,以便随后进行分组
ulong lul_temp
lul_temp = 0
ulong lul_x, lul_y // lul_x: 加密明文; lul_y: 加密密文
int I
do until ls_str = ""
lul_temp = Integer(left(ls_str, 2))
if lul_temp >= li_n then // 将明文分组,且每组均小于N(N=33)
lul_temp = Integer(left(ls_str, 1))
ls_str = right(ls_str, len(ls_str)-1)
else
ls_str = right(ls_str, len(ls_str)-2)
end if
lul_y = 1
for I = 1 to li_e // 进行乘方运算
lul_y = lul_y * lul_temp
next
lul_y = mod( lul_y, 33) // 根据加密公式计算密文
sle_2.text = trim(sle_2.text) + string(lul_y) // sle_2.tex中存放的是加密后的密文
loop
/******************** 结束 *****************/
/**************** 解密程序代码 ***************/
ls_str = Trim(sle_2.text) // 与加密同理,将密文转换成字符串,以便随后进行分组
ulong lul_x0, lul_x1
do until ls_str = ""
lul_temp = Integer(left(ls_str, 2))
if lul_temp >= li_n then // 将密文分组,且每组均小于N(N=33)
lul_temp = Integer(left(ls_str, 1))
ls_str = right(ls_str, len(ls_str)-1)
else
ls_str = right(ls_str, len(ls_str)-2)
end if
// 由于考虑到乘方运算得结果可能会超出数值所允许得最大取值,
// 因此对解密公式进行适当转换,lul_x = lul_x0 * lul_x1
lul_x0 = 1
lul_x1 = 1
// 假如解密密钥是7,则先进行数的4次方运算取模,在进行数的3次方运算取模
for I = 1 to 4
lul_x0 = lul_x0 * lul_temp
next
lul_x0 = mod( lul_x0, 33)
for I = 1 to li_d - 4
lul_x1 = lul_x1 * lul_temp
next
lul_x1 = mod( lul_x1, 33)
lul_x = mod(lul_x0 * lul_x1, 33) // 根据解密公式计算明文
sle_3.text = trim(sle_3.text) + string(lul_x) // sle_3.tex中存放的是解密后的明文
loop
/******************** 结束 *****************/
总结,文中所提供的程序代码已经在PowerBuilder 7.0,Windows 98环境下运行通过。本文所讨论的通过读取硬盘序列号方法来实现程序加密技
术同样可以运用到其它程序语言中,只是具体的实现方法略有差异罢了。由于本人水平有限,错误和不足之处再所难免,因此还敬请同行们给予指
教。
huoyan21
2004-01-14
打赏
举报
回复
一、如何读取硬盘序列号
要读取硬盘序列号我们可以用汇编来实现,但毕竟不容易,况且也不能有效的结合到PB脚本中。在PB中我们可以通过调用Windows提供的外部函数
GetVolumeInformationA()来实现。这相对来说比较简单。
该函数的原型为:
BOOL GetVolumeInformation(
LPCTSTR lpRootPathName,
LPTSTR lpVolumeNameBuffer,
DWORD nVolumeNameSize,
LPDWORD lpVolumeSerialNumber,
LPDWORD lpMaximumComponentLength,
LPDWORD lpFileSystemFlags,
LPTSTR lpFileSystemNameBuffer,
DWORD nFileSystemNameSize
上述原型中,参数类型只要是以"LP-"开头的表明该参数用的是长指针(Long Pointer)类型,即在PB中调用时的参数传递是通过引用传递。在8
个参数中对我们真正有用的只有两个LPCTSTR lpRootPathName和LPDWORD lpVolumeSerialNumber。其中参数lpRootPathName是指向文件系统根目录的
地址,我们需要用它来指明所要获取序列号的硬盘盘符;参数lpVolumeSerialNumber是返回的硬盘序列号的地址,这正是我们需要的。
众所周知,PB在调用任何外部函数前都要首先进行函数声明,可以将声明放在全局或局部函数声明中。具体声明如下:
Function Boolean GetVolumeInformationA( &
ref String ls_Rootpath, &
ref String ls_volumnename, &
Ulong lul_VolumeNameSize, ref Ulong lul_VolumeSerialNumber, &
ref Ulong lul_MaximumComponentLength, &
ref Ulong lul_FileSystemFlags, &
ref String ls_FileSystemNameBuffer, &
Ulong lul_FileSystemNameSize &
) Library "Kernel32.dll"
上述声明中,"ref"指明是该参数是通过引用传递的,有关函数引用的详细内容请参见有关教程。声明完毕我们不能马上进行调用,还必需确保已
为它分配足够的内存空间,即使是参数引用传递也是这样,否则的话将会出现调用错误,这跟C语言的引用调用不同,这一点往往被忽视,希望读者能
够注意。也就是为什么我在调用该函数前将有些字符串参数给它预先分配了多达256个字符空间以及给一些整型类型的参数赋初始值256。完整的读取
硬盘序列号的程序代码如下:
/******************* 程序代码 ************************/
String ls_Rootpath, ls_volumnename
ls_Rootpath = "C:" // 指定要得到序列号的硬盘,
// 一般情况都是C盘,除非你能保证用户存在其它逻辑盘或物理盘
ls_volumnename = Space(256) // 分配足够的空间,下同
Ulong lul_VolumeNameSize
lul_VolumeNameSize = 256
Ulong lul_VolumeSerialNumber, lul_MaximumComponentLength, lul_FileSystemFlags
lul_MaximumComponentLength = 256
String ls_FileSystemNameBuffer
ls_FileSystemNameBuffer = space(256)
Ulong lul_FileSystemNameSize
lul_FileSystemNameSize = 256
beep(1)
boolean lb_rtn
lb_rtn = False
lb_rtn = GetVolumeInformationA(ls_Rootpath, ls_volumnename, lul_VolumeNameSize,
lul_VolumeSerialNumber, lul_MaximumComponentLength, lul_FileSystemFlags,
ls_FileSystemNameBuffer, lul_FileSystemNameSize)
if lb_rtn = true then
MessageBox("提示","函数调用成功!")
else
MessageBox("提示","函数调用失败!")
end if
sle_1.text = String(lul_VolumeSerialNumber) // 得到硬盘序列号
/********************* 结束 *************************/
yanghongfeng
2004-01-14
打赏
举报
回复
我用的是提取硬盘的物理id号,得到十进制的值后与一个字符的十进制的值进行取余后,得到的一串字符中的后面的几个字符为注册码。
只供参考。源代码我现在手里没有。
PB
程序
注册
数据源
PB
程序
注册
数据源
在
程序
里面
注册
odbc数据源 ASA8 是参考书上弄的
求
分下载
PB
即打即停源码 32209234@qq.com
从单体架构到微服务架构:Java
程序
的运行原理
在单体架构中,整个应用
程序
被构建为一个单一的、独立的单元。每个微服务都是一个独立的、可独立部署的单元,它们之间通过轻量级的通信
机制
进行交互,例如使用HTTP/REST API。随着软件系统的不断发展和复杂性的
增加
,许多组织开始将传统的单体式架构转向更灵活和可扩展的微服务架构。在这篇文章中,我们将简要介绍Java
程序
在从单体架构迁移到微服务架构时的运行原理,并提供相应的
源代码
示例。3.4 服务
注册
与发现:实现服务
注册
与发现
机制
,使得每个微服务能够自动
注册
自己的地址和提供的服务,并能够发现其他微服务的地址。
PB
开发的局域网聊天
程序
源代码
.rar
\
PB
开发的局域网聊天
程序
源代码
.rar \
PB
开发的局域网聊天
程序
源代码
.rar \
PB
开发的局域网聊天
程序
源代码
.rar
项目实战视频课程:美团小
程序
(Node.js+Express+支付)
小
程序
视频教程,本课程实现了美团小
程序
的核心部分。采用异步的方式,通过AJAX从服务端获取数据,并使用利用小
程序
本身的
机制
更新数据。美团app实现的功能包括首页分类显示、
注册
登录、商品页面、套餐页面、购物,支付(使用Node.js实现)、个人中心等。
小
程序
开发入门
2020年12月最新最全的零基础小
程序
实战入门,零基础入门微信小
程序
开发。10天带领大家上线一款属于自己的微信小
程序
。微信小
程序
开发入门视频教程,该课程从微信小
程序
注册
到官方开发工具、官方Demo、再到开发个人专属小
程序
所有知识点,包括小
程序
获取用户信息等功能。
非技术版
396
社区成员
11,537
社区内容
发帖
与我相关
我的任务
非技术版
PowerBuilder 非技术版
复制链接
扫一扫
分享
社区描述
PowerBuilder 非技术版
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章