java - 如何設(shè)計(jì)帶時(shí)間限制的激活碼?
問題描述
我做了個(gè)軟件,想用激活碼方式授權(quán),有些只想授權(quán)1個(gè)星期,光是授權(quán)的話,用MD5做加密的,但是怎么讓激活碼帶著授權(quán)時(shí)間讓程序識(shí)別呢?請(qǐng)教大神們
問題解答
回答1:別想著放客戶端,改了電腦時(shí)間你這個(gè)程序就over了。建議放在服務(wù)端認(rèn)證,啟動(dòng)的時(shí)候使用HTTP方式去服務(wù)端驗(yàn)證是否過(guò)期
回答2:很簡(jiǎn)單,1、首先要用服務(wù)端來(lái)驗(yàn)證授權(quán)碼的有效性;2、MD5規(guī)則可以加上時(shí)間來(lái)生成,例如授權(quán)有效期一個(gè)月,那你的MD5可以使用MD5(authCode+dateformart(new Date(),'yyyymm')),這樣一個(gè)月內(nèi)你的授權(quán)碼生成的Md5都是一樣的,也就是授權(quán)碼有效,注意一定是服務(wù)端校驗(yàn),時(shí)間要取服務(wù)端的時(shí)間;3、MD5規(guī)則可以再增加幾層,防止被撞庫(kù)破解,可以加上MD5(SHA512(salt+authCode+dateformart(new Date(),'yyyymm'))),這樣基本沒可能破解了,salt的話可以每一個(gè)authCode生成一個(gè)隨機(jī)變量,保存在服務(wù)端。
回答3:這個(gè)方法有多種,但都不能保證不被破解。
簡(jiǎn)單的來(lái)說(shuō),可以把時(shí)間信息添加到驗(yàn)證碼中。比如說(shuō)你需要的有效期是7天,那么你可以以你生成驗(yàn)證碼那天的日期來(lái)作為生成驗(yàn)證碼的一個(gè)因子。在你的程序做驗(yàn)證的時(shí)候,獲取當(dāng)前的日期,并往前再推六天,共7天,以同樣的方式生成7個(gè)驗(yàn)證碼來(lái)檢驗(yàn)。如果有一個(gè)是正確的,那說(shuō)明還沒有過(guò)期。
回答4:你MD5不也是用一個(gè)數(shù)算得么?把時(shí)間信息加進(jìn)去不就行了?
回答5:不想被破解,只能放到服務(wù)端,我可以給你提供免費(fèi)的后端服務(wù),哈哈
回答6:最簡(jiǎn)單的方法是,將你md5加密后的激活碼+日期存到數(shù)據(jù)庫(kù)里,驗(yàn)證的時(shí)候判斷下時(shí)間就可以了,當(dāng)然激活碼不能重復(fù),可以設(shè)置主鍵或唯一索引
回答7:md5加密的話,加密串里不能放日期,日期用別的加密串或者明文,不想被破解就用服務(wù)端認(rèn)證
回答8:可以這樣設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu):{’a’:’驗(yàn)證碼’,’b’:’過(guò)期時(shí)間(距離1970年的時(shí)間長(zhǎng)度)’},然后將該段字符串加密即可。
回答9:在服務(wù)器端做比較方便吧,服務(wù)器端三個(gè)字段可以,過(guò)期時(shí)間,是否已使用,客戶只知道key就可以了
回答10:放在redis里面,設(shè)置過(guò)期時(shí)間。。。
相關(guān)文章:
1. javascript - vue的element-ui(餓了嗎UI) webpack打包時(shí)externals無(wú)法分離2. (python)關(guān)于如何做到按win+R再輸入文件文件名就可以運(yùn)行?3. mysql - 分庫(kù)分表、分區(qū)、讀寫分離 這些都是用在什么場(chǎng)景下 ,會(huì)帶來(lái)哪些效率或者其他方面的好處4. python - 能通過(guò)CAN控制一部普通的家用轎車嗎?5. javascript - 請(qǐng)問 chrome 為什么會(huì)重復(fù)加載圖片資源?6. javascript - 請(qǐng)教如何獲取百度貼吧新增的兩個(gè)加密參數(shù)7. css3 - 微信前端頁(yè)面遇到的transition過(guò)渡動(dòng)畫的bug8. Python爬蟲如何爬取span和span中間的內(nèi)容并分別存入字典里?9. html5 - 只用CSS如何實(shí)現(xiàn)input框的寬度隨框里輸入的內(nèi)容長(zhǎng)短自動(dòng)適應(yīng)?10. javascript - 關(guān)于css絕對(duì)定位在ios瀏覽器被橡皮筋遮擋的問題
