高分求助!如何在服务器端加密!!大家都进来看看吧,帮顶也有分!!!

dayuforever 2006-07-21 09:06:50
小弟参与开发了一套规划办公自动化系统,C/S结构的,基于ORACLE数据库。
服务器端只安装了ORACLE9i与ArcGis软件,
在客户端安装我们以vb开发的软件。
本来为了保护版权,在开发的软件中加入了检测加密狗的函数,即是客户端必须安装加密狗的驱动并插上加密狗通过验证后才能正常运行本程序,这样每一个客户端就必须配备一只加密狗。
后来用户觉得不方便要求去掉客户端的加密狗。但为了保护我们的软件不让随便移植我就想至少在服务器端做个加密程序,这样客户端是可以随便扩展,但服务器配上加密狗就能够限制其任意移植。
现在的问题是我们开发的软件是纯在客户端安装的,服务器端就安装了基础软件比如ORACLE什么的,考虑了很久也没有找到很好的思路:如何做一个服务器端的程序让客户端运行的时候根据服务器端的这个程序是否开启来控制其能否运行?
开始想的是这个服务器端程序控制ORACLE的服务启动,但别人在Windows的计算机管理里面就可以控制服务啊;后来再想在ORACLE里建立一张表,让服务器端程序启动后间隔规定时间往里面写入信息,然后客户端程序实时访问该表以判断服务器端程序是否在运行,运行就继续正常的操作,没有运行就终止客户端的访问,但往表里写入什么信息呢,时间吗?如果局域网内时间不一致呢?状态吗?那如何描述这个状态呢?
我已经晕了,一筹莫展数日。
不知道大家有些什么好的建议和意见啊,请一定帮帮忙吧!在此先拜了!分不够再加啊!!
...全文
761 45 打赏 收藏 转发到动态 举报
写回复
用AI写文章
45 条回复
切换为时间正序
请发表友善的回复…
发表回复
dayuforever 2006-08-29
  • 打赏
  • 举报
回复
都无人问津,
得,
就此结帖,
感谢楼上各位大大!
dayuforever 2006-08-15
  • 打赏
  • 举报
回复
呵呵,各位老大,前段时间不断出差,实在没有时间顾及这个问题,不好意思啊。
是这样的,现在有一个我觉得是比较简单的方案,无论从实现原理还是实现过程而言,其流程如下:
1、服务器端:开始运行,检测T_SERVER表是否存在。如果没有就建立此表;有就写入信息,包括比如启动该程序的时间,更新时间,客户端数等。以后每隔一段固定时间实时检测该表,当客户端数达到某一数值,就执行删除或清空该表操作
2、一般客户端:开始运行,检测T_SERVER表是否存在。如果没有就提示并退出;有就写入信息,包括比如更新时间,客户端数+1 等
3、系统管理员客户端:开始运行,检测T_SERVER表是否存在。当进入某个特定模块或者执行某个功能时,触发函数自动删除或清空该表操作
4、加密狗外壳:包裹在服务器端,作为程序合法入口的检查工具。
不得不承认,下意识地回避了SOCKET通信、硬件序列号读取等思路,还是觉得自己在这些方面没有多大把握啊。
不知大家对我那个简单且笨的方法有什么意见啊?
希望多提看法,谢谢!
dayuforever 2006-08-15
  • 打赏
  • 举报
回复
各位大大,再给点意见啊!
dayuforever 2006-07-26
  • 打赏
  • 举报
回复
呵呵刚出差回来
容我再想想……
吾非大神 2006-07-26
  • 打赏
  • 举报
回复
帮顶]
学习
bizshow 2006-07-23
  • 打赏
  • 举报
回复
楼主我是来帮你顶的...给分啊
  • 打赏
  • 举报
回复
所以不能用简单的成功指令之类的,也不能是一个由加密狗产生的没变化的(即便加密处理了,但一个加密狗岂不就是对应一个加密后的结果?)数据(不管多复杂)。
  • 打赏
  • 举报
回复
发的数据包可以拦截,用个WPE就很容易做个模拟包
熊孩子开学喽 2006-07-21
  • 打赏
  • 举报
回复
服务器段加一个验证程序
客户端将机器信息发送到服务器段记录好.
当装到新的机器上,因为和记录的原有客户端信息不同,就不能运行.
of123 2006-07-21
  • 打赏
  • 举报
回复
>winsock不失为一个方法,客户那边是内外两套网络来回切换,如果总是以发送消息来确认的话难保当网络切换时不出现丢失的情况啊。
>大家还有别的办法么?

如果使用 TCP 协议,它出现错误的概率和客户访问服务端数据库出现错误的概率相同。如果这个概率不能容忍,你的系统压根就不可用。

另一个更严格的方式是,客户不直接访问数据库,而是向服务程序发消息,由服务程序查询并返回。因为服务程序有加密狗控制,就可以完全控制数据的合法访问。但这样做需要更高的技巧,否则效率会比较低。

你最初的设想也很好。实际上你的目的是用一个记录数据来表示当前数据的合法性。可以这样来实现:
1 客户端和服务端共享一个密钥。也可以是一组密钥,通过某种规则或信息来轮换使用,可以加大破解难度。

2 服务定时检查狗的合法性。如果合法,取得一个随机数串,用一个密钥加密,将随机数和密文(还可以包括密钥号)同时写入一个表记录中。客户端查询后,用对应的密钥加密(或解密)并比对。如果成功,继续;否则警示并退出。

3 如果服务端狗验证失败,随意改写该表记录,例如全0或全F。这必将导致客户验证失败。
dayuforever 2006-07-21
  • 打赏
  • 举报
回复
楼上的说的很对,我的只是采用服务式数据库的多用户系统。看来以后还要多在结构设计上下功夫啊。
我觉得问题不在于如何确定服务器端程序的唯一性,反正有加密狗控制,只要我在程序中加入检测加密狗的函数就可以控制了。
最主要的问题是,如何保证服务器端程序与客户端程序相互间信息的确认和交换呢?
  • 打赏
  • 举报
回复
当然,所谓安装,不仅是安装一个正常的数据库和一个千篇一律的通讯验证程序,而是要将授权ID的信息注入,每次运行都检测唯一标识,与授权ID进行验证。

如果不考虑性能的话,还可进一步用授权ID对数据库关键数据进行加解密操作。
dayuforever 2006-07-21
  • 打赏
  • 举报
回复
winsock不失为一个方法,客户那边是内外两套网络来回切换,如果总是以发送消息来确认的话难保当网络切换时不出现丢失的情况啊。
大家还有别的办法么?
of123 2006-07-21
  • 打赏
  • 举报
回复
楼上忘了,他有加密狗。

你方案是“穷人”方案,业余用用。
加密狗或 PKI 安全认证模块可以加载到任何服务器上,而且是厂方授权的。它是一个物理存在。而系列号之类都是信息存在,容易破解的。

使用加密狗对用户更友好,因为易于维护和迁移。
  • 打赏
  • 举报
回复
简单地写个服务端程序也没用,连库带程序一起拷走不就破了?
关键是写入读取服务端硬件设备唯一标识。
参照授权序列号的制作即可解决这个问题,让用户要安装服务端就必须给你们发一个程序报出的加密后的机器码,你们根据它给出运算后的授权ID,用户用此序列号进行安装,每一个序列号只针对唯一一台服务器设备有效,更换硬件后必须重新授权。
白发程序猿 2006-07-21
  • 打赏
  • 举报
回复
帮顶
of123 2006-07-21
  • 打赏
  • 举报
回复
客户程序不也是你写的吗?
客户端启动时,向服务端发一个消息。服务端接收到以后,检查验证狗,给客户发回成功或失败消息。
如果失败,客户端给出警示并终止运行。

你的 C/S 架构好像不完整,并没有写服务程序。你的架构只能算是采用服务式数据库的多用户系统。

用 Winsock 写简单的客户/服务程序就可以解决。
dayuforever 2006-07-21
  • 打赏
  • 举报
回复
但是完全可能在别处重新安装一套数据库啊,反正ORACLE的数据导入导出也就是一体力活,
客户端安装程序那不就可以随处配套安装了?
一笑拔剑 2006-07-21
  • 打赏
  • 举报
回复
数据库都放服务端
他客户端能跑那去阿?
射天狼 2006-07-21
  • 打赏
  • 举报
回复
写一个服务端程序,通过SOCKET通信与客户端进行连接,启动客户端的时候先连接服务端,服务检测到加密狗之后给客户端发一个成功指令,否则客户端提示:盗版软件。


╭═══════════════════╮
║ 免费的源码、工具网站,欢迎大家访问!║
║ http://www.j2soft.cn/        ║
╰═══════════════════╯
加载更多回复(25)
下载代码方式:https://pan.quark.cn/s/dd3561eca308 在软件开发领域,面向对象编程(OOP)是一种普遍采纳的结构化方法,它使得开发者能够借助模拟现实环境中的实体和关系来构建软件系统。在本案例中,我们观察到的是一个关于借助抽象类来执行不同几何图形面积求解的实践应用。现在,让我们详细析这一议题。 标题 "应用抽象类计算面积" 清晰地表明我们将要讨论一个抽象类,此类设定了一个用于测量图形面积的标准函数,但并未提供实际的执行过程。抽象类在诸如C#或Java等编程语言中通常借助`abstract`修饰符进行声明,它们无法直接创建对象实例,仅能作为其他类的基础模板。 描述部提及的"图形界面应用"暗示这是一个基于视觉用户界面(GUI)的系统,可能运用了.NET Framework的Windows Forms或WPF技术,或者是Java平台的Swing或JavaFX框架。在这样环境下,用户能够通过视觉元素与这些几何体进行互动,例如输入相关尺寸并观看到计算得出的面积值。 抽象类“几何体”内嵌了“计算面积”这一抽象函数。在代码层面,这可以被表述为: ```csharp public abstract class GeometricShape { public abstract double CalculateArea(); } ``` 随后,有三个派生类:圆(Circle)、矩形(Rectangle)和三角形(Triangle),它们各自提供了这个抽象函数的具体实现。比如,圆的面积是通过π乘以半径的平方得到的,矩形的面积是长和宽的乘积,而三角形的面积可能是底乘以高再除以2的结果。这些类将提供具体实现来计算它们各自的面积: ```csharp p...
内容概要:本文系统研究了移相控制全桥LLC谐振变换器的工作特性,深入析其在不同工作模式下的运行机理与性能表现,重点探讨了软开关实现、高效率能量转换及宽范围电压调节等关键技术优势。通过Simulink搭建精确的仿真模型,对谐振腔参数、开关频率、电压增益、系统效率等关键指标进行仿真析,验证了理论设计的正确性。同时,详细研究了移相控制策略对系统动态响应、稳定性和轻载/重载工况适应性的影响,揭示了控制参数与电路参数之间的耦合关系,为高频高效电源设计提供了理论依据和实践指导。; 适合人群:具备电力电子技术、模拟电路及自动控制理论基础,从事开关电源、新能源变换器、电动汽车充电模块或高频电源系统研发的工程师及高校研究生。; 使用场景及目标:①掌握全桥LLC谐振变换器的拓扑结构、工作原理与关键参数设计方法;②理解移相控制在实现零电压开通(ZVS)和零电流关断(ZCS)中的作用机制;③通过Simulink仿真掌握变换器建模、参数优化与性能评估流程,服务于实际产品开发与学术课题研究。; 阅读建议:建议读者结合提供的Simulink仿真模型进行同步操作,重点关注谐振网络(Lr, Lm, Cr)参数与移相角之间的匹配设计,深入理解软开关条件的形成过程,并通过调整负载和输入电压进行多工况仿真,以全面掌握系统动态特性。

7,787

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧