`
zydky
  • 浏览: 86914 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

如何让你的应用软件有试用日期的限制

阅读更多

     很多成型的应用软件都有试用版和正式版之分,试用版一般都有功能上的限制,同时也有使用次数或使用期限的限制。要使试用版成为正式版,有些软件是要求你拿注册码注册,还有一些软件是通过授权文件来区分试用版和正式版,从试用版变成正式版,只是把授权文件换一下而已。一般来说,桌面软件会采用注册码的方式较多,而服务器端软件采用授权文件的较多,授权文件一般会将要限制的信息,比如并发数、最后日期等明文、密文一块保存。

 

    本人在做项目过程中采用了一种变通的解决方式,让我的应用有了使用日期的限制:

 

1、将要限制的日期采用MD5加密,连同明文的日期一起放在一个配置文件里

2、在程序中加一个过滤器,读取这个配置文件,通过对读取到的明文重新进行加密,和从配置文件里读取到的密文进行比较

3、如果两者不一致,表明授权文件遭到篡改,不再继续提供服务

4、如果两者一致,继续比较从配置文件里读取的限制日期和当前日期,如果当前日期晚于限制日期,表明使用期限已到,不再继续提供服务

5、否则继续提供服务

 

相关代码如下:

 

加密类

public class SecurityUtil {//采用这个类将明文加密  
  
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
        String expiration = "2012-10-09";  
        String signature = "";  
        try{  
            signature = SecurityUtil.doMessageDigest(expiration);  
        }  
        catch(Exception e){  
            e.printStackTrace();  
        }  
        System.out.println("expiration:" + expiration + "\nsignature:" + signature);//产生的密文和明文一起存入配置文件  
  
    }  
      
    public static String doMessageDigest(String arg) throws Exception{  
        //要生成摘要的明文  
        byte[] b=arg.getBytes("UTF8");  
            
        //生成摘要  
        MessageDigest md=MessageDigest.getInstance("MD5");  
        md.update(b);  
        byte[]s=md.digest();     
          
          
        //显示生成的摘要  
        String res="";  
        for(int i=0;i<s.length;i++){//将字节数组转换成字符串  
            res=res+Integer.toHexString((0x000000ff&s[i])|0xffffff00).substring(6);  
        }  
        return res;  
    }  
  
}

 

 过滤器类

public class SecurityFilter extends HttpServlet implements Filter {  
      
    /** 
     *  
     */  
    private static final long serialVersionUID = 920198400163140364L;  
    private FilterConfig filterConfig;  
    private Logger logger = Logger.getLogger(getClass());  
  
    public void doFilter(ServletRequest arg0, ServletResponse arg1,  
            FilterChain filterChain) throws IOException, ServletException {  
        // TODO Auto-generated method stub  
        NewCarBrandConfig config = new NewCarBrandConfig();  
        String expiration = config.getExpiration();  
        String signature = config.getSignature();  
        String target = "";  
        try{  
            target = SecurityUtil.doMessageDigest(expiration);  
        }  
        catch(Exception e){  
            e.printStackTrace();  
        }  
        if(!signature.equals(target)){  
            logger.warn("不合法的授权文件!");  
            return;  
        }  
        else{  
            Date today = new Date();  
            Date targetDay;  
            try {  
                targetDay = ToolUtil.getDateFromString(expiration,"yyyy-MM-dd");  
                if(today.after(targetDay)){  
                    logger.warn("授权文件已过期!");  
                    return;  
                }  
            } catch (ParseException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
        }  
        filterChain.doFilter(arg0, arg1);  
    }  
  
    public void init(FilterConfig arg0) throws ServletException {  
        // TODO Auto-generated method stub  
        this.filterConfig = arg0;

 

配置文件

expiration=2012-10-09  
signature=fd23826ef02908bf7404839a32ae44b4

 

说明:这只是一个变通的解决办法,因为当授权文件不合法或者授权文件过期时,并没有停止程序运行,只是通过让过滤器强制返回,使用户在访问系统时只得到一个空页面,程序还在后台运行,但用户不能使用。

分享到:
评论
1 楼 forcer521 2013-03-01  
既然是md5,我把配置文件中的明文和密文同时修改了,你的监测不就废了?

相关推荐

    去除软件的试用时间限制 runasdate(附汉化补丁)

    今天给大家介绍的这款小软就有一个神奇的功能,就是能让这些有倒计时的软件能永不过期!就像时间停止一样。因为他们的原理是在启动某个程序之前,先自动把系统的时间改成未过期前的某一天,当程序检查时间时,时间...

    RunAsDate 1.41 可以延长软件试用日期的软件

    虽然RunAsDate可以延长软件试用期,但请注意这可能违反软件的使用协议。如果你打算长期使用某款软件,建议购买正版授权以支持软件开发者。此外,对于某些安全敏感的程序或系统服务,不建议使用RunAsDate,以免引发...

    C#/.NET编写的试用30天代码,注释全可自由更改。

    总结来说,这个代码片段提供了一个C#/.NET实现的试用期管理机制,通过注册表日期检测和系统日期检查来控制软件试用期限,且源代码注释清晰,方便其他开发者进行定制和修改。对于学习C#编程以及软件试用期管理的...

    易语言给软件限制时间源码.rar

    在软件开发中,有时为了保护知识产权或推行商业策略,开发者会采用时间限制技术,使软件在试用一段时间后自动停止运行,促使用户购买正式授权。易语言作为一款面向中国用户的编程工具,提供了丰富的函数库,使得实现...

    如何破解软件时间限制

    如何破解软件时间限制第一破解时间限制软件原理:一般地共享软件要达到计算机用户使用次数或时间的目的,通常是在安装时将当前的时间标志或者用户使用软件的次数记录,隐蔽的存放在注册表或某个文件中。每次使用软件...

    试用期设置.rar

    在IT行业中,软件试用期的设置是许多开发者和产品经理关注的重要环节,它涉及到用户体验、产品销售策略以及版权保护等多个方面。"试用期设置"的主题涵盖了如何限制软件的试用天数、使用次数,以及如何实现永久授权的...

    软件运行相关限制

    同时,对于运行日期限制,可以设置宽限期,让用户有足够的时间续费或更新许可证。 综上所述,软件运行相关的限制是软件安全和资源管理的关键部分。理解并正确实现这些限制,既能保护软件开发商的权益,也能为用户...

    易语言给功能加时间限制源码

    总之,"易语言给功能加时间限制源码"是一种实用的技术,对于软件开发者来说,了解并掌握这种技术有助于保护自己的知识产权,同时为用户提供合理的试用体验,推动软件销售。在实际应用中,应根据软件的具体需求和安全...

    RunAsDate.exe 破解软件时间限制

    【神器2】 破解软件时间限制!收费软件无限试用!永久试用收费软件、破解软件时间限制。

    冠唐设备管理软件试用版

    "冠唐设备管理软件试用版"是一款专为设备管理工作设计的应用程序,旨在提供高效、便捷的设备管理和维护解决方案。这款软件集成了多种功能,帮助用户轻松跟踪、监控和优化设备性能,确保设备运行的稳定性和效率。在...

    TWT2014解除时间限制补丁程序

    时间限制是指软件在试用期间设置的一种机制,当超过特定日期或使用天数后,软件将无法继续运行或功能受限。这个补丁的存在,意味着用户可以绕过原有的时间限制,使软件能够无限期地使用。 【描述】:“TWT2014解除...

    应用程序运行时间修改软件RunAsDate

    这样,对于那些有试用期限的应用,用户可以在过期后继续使用,而不会触发软件的限制机制。 **使用方法** 1. **下载与安装** - 从官方或可信来源下载RunAsDate的最新版本,通常包括可执行文件RunAsDate.exe。 - ...

    软件加密技术从入门到精通

    讲述如何实现日期限制、次数限制、最后试用期限制、软件启动后的执行时间限制、nag窗口限制、各类破解工具的介绍和对工具的应用,以及如何实现对这些工具的反跟踪;介绍如何用硬件系列号、用户名作为加密依据进行...

    Tomlab试用授权

    试用版通常是为了让用户在购买前体验软件功能而提供的,通常有限制,如使用时间、功能或解决问题的数量。在安装Tomlab试用版时,需要特别注意授权日期,因为软件会检查系统时间以验证是否在有效期内。将系统时间调整...

    webstorem重置试用.zip

    3. 时间限制:免费试用期可能有时间限制,例如7天、30天等。当达到预设的试用期限后,应用将自动阻止用户进一步试用。 4. 试用重置逻辑:Webstorem平台需要有相应的后端逻辑来处理试用重置请求。这可能涉及到更新...

    C#软件试用

    通过以上知识点的学习和实践,你将能够更好地理解和运用C#进行软件试用,无论是开发个人项目还是商业应用,都能得心应手。不断探索C#的最新特性和最佳实践,将有助于提升你的编程技能和开发效率。

    易语言给功能加时间限制

    合理设定试用期限,提供明确的提示信息,以及在限制到期后给予用户升级到完整版的途径,有助于提高软件的用户满意度和转化率。 总之,通过易语言,开发者可以轻松地为软件功能添加时间限制,以保护自己的知识产权。...

    时间限制工具

    这种工具的主要功能是让特定的应用程序在运行时“认为”当前时间是用户设定的任意日期,从而绕过某些软件的时间限制,例如试用期限制。在描述中提到,这款工具是PC绿色版,意味着它无需安装,直接下载后即可使用,且...

    Trail-reset 试用信息清空

    在IT行业中,软件试用期通常有限制,以吸引用户购买完整版本。"Trail-reset 试用信息清空"这个主题涉及到的是如何清除虚拟音频(VA)软件的试用信息,以便重新开始试用周期。这通常是通过修改注册表来实现的,因为...

    visibroker的C++试用版本licence

    5. **试用限制**:试用版本通常有使用时间或功能上的限制。例如,试用期可能为30天,或者某些高级特性可能被禁用。在试用期结束后,若想继续使用,你需要购买正式的许可证。 在实际开发中,理解并正确处理...

Global site tag (gtag.js) - Google Analytics