java - 如何设计带时间限制的激活码?
问题描述
我做了个软件,想用激活码方式授权,有些只想授权1个星期,光是授权的话,用MD5做加密的,但是怎么让激活码带着授权时间让程序识别呢?请教大神们
问题解答
回答1:别想着放客户端,改了电脑时间你这个程序就over了。建议放在服务端认证,启动的时候使用HTTP方式去服务端验证是否过期
回答2:很简单,1、首先要用服务端来验证授权码的有效性;2、MD5规则可以加上时间来生成,例如授权有效期一个月,那你的MD5可以使用MD5(authCode+dateformart(new Date(),'yyyymm')),这样一个月内你的授权码生成的Md5都是一样的,也就是授权码有效,注意一定是服务端校验,时间要取服务端的时间;3、MD5规则可以再增加几层,防止被撞库破解,可以加上MD5(SHA512(salt+authCode+dateformart(new Date(),'yyyymm'))),这样基本没可能破解了,salt的话可以每一个authCode生成一个随机变量,保存在服务端。
回答3:这个方法有多种,但都不能保证不被破解。
简单的来说,可以把时间信息添加到验证码中。比如说你需要的有效期是7天,那么你可以以你生成验证码那天的日期来作为生成验证码的一个因子。在你的程序做验证的时候,获取当前的日期,并往前再推六天,共7天,以同样的方式生成7个验证码来检验。如果有一个是正确的,那说明还没有过期。
回答4:你MD5不也是用一个数算得么?把时间信息加进去不就行了?
回答5:不想被破解,只能放到服务端,我可以给你提供免费的后端服务,哈哈
回答6:最简单的方法是,将你md5加密后的激活码+日期存到数据库里,验证的时候判断下时间就可以了,当然激活码不能重复,可以设置主键或唯一索引
回答7:md5加密的话,加密串里不能放日期,日期用别的加密串或者明文,不想被破解就用服务端认证
回答8:可以这样设计数据结构:{’a’:’验证码’,’b’:’过期时间(距离1970年的时间长度)’},然后将该段字符串加密即可。
回答9:在服务器端做比较方便吧,服务器端三个字段可以,过期时间,是否已使用,客户只知道key就可以了
回答10:放在redis里面,设置过期时间。。。
相关文章:
1. docker绑定了nginx端口 外部访问不到2. mysql优化 - mysql EXPLAIN之后怎么看结果进行优化 ?3. angular.js - 关于typescript的Object的属性的问题?4. docker-compose 为何找不到配置文件?5. angular.js使用$resource服务把数据存入mongodb的问题。6. 一个网页怎么连接到数据库抓取信息呢7. 为什么我ping不通我的docker容器呢???8. javascript - 求解答,koa-bodyparser获取到的参数是空对象,为什么?????9. docker - 如何修改运行中容器的配置10. 微信小程序如何加载h5页面