java - 如何设计带时间限制的激活码?
PHP中文网
PHP中文网 2017-04-18 10:29:43
0
13
1861

我做了个软件,想用激活码方式授权,有些只想授权1个星期,光是授权的话,用MD5做加密的,但是怎么让激活码带着授权时间让程序识别呢?
请教大神们

PHP中文网
PHP中文网

认证0级讲师

全部回复(13)
Ty80

别想着放客户端,改了电脑时间你这个程序就over了。建议放在服务端认证,启动的时候使用HTTP方式去服务端验证是否过期

Ty80

很简单,
1、首先要用服务端来验证授权码的有效性;
2、MD5规则可以加上时间来生成,例如授权有效期一个月,那你的MD5可以使用MD5(authCode+dateformart(new Date(),"yyyymm")),这样一个月内你的授权码生成的Md5都是一样的,也就是授权码有效,注意一定是服务端校验,时间要取服务端的时间;
3、MD5规则可以再增加几层,防止被撞库破解,可以加上MD5(SHA512(salt+authCode+dateformart(new Date(),"yyyymm"))),这样基本没可能破解了,salt的话可以每一个authCode生成一个随机变量,保存在服务端。

洪涛

这个方法有多种,但都不能保证不被破解。

简单的来说,可以把时间信息添加到验证码中。
比如说你需要的有效期是7天,那么你可以以你生成验证码那天的日期来作为生成验证码的一个因子。
在你的程序做验证的时候,获取当前的日期,并往前再推六天,共7天,以同样的方式生成7个验证码来检验。如果有一个是正确的,那说明还没有过期。

大家讲道理

你MD5不也是用一个数算得么?把时间信息加进去不就行了?

小葫芦

不想被破解,只能放到服务端,我可以给你提供免费的后端服务,哈哈

洪涛

最简单的方法是,将你md5加密后的激活码+日期存到数据库里,验证的时候判断下时间就可以了,当然激活码不能重复,可以设置主键或唯一索引

刘奇

md5加密的话,加密串里不能放日期,日期用别的加密串或者明文,不想被破解就用服务端认证

黄舟

可以这样设计数据结构:{'a':'验证码','b':'过期时间(距离1970年的时间长度)'},然后将该段字符串加密即可。

黄舟

在服务器端做比较方便吧,服务器端三个字段可以,过期时间,是否已使用,客户只知道key就可以了

左手右手慢动作

放在redis里面,设置过期时间。。。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板