雖然標題列出了很多種「碼」,但其實有些是乙個意思,只是叫法不一樣而已。我所介紹的演算法也不是說絕對嚴謹、不能破解的,它們只是適用於某些場合而已。舉個例子,我現在想設計乙個長度是24個字元的註冊碼,但如果你用比較安全的rsa演算法來做的話,可能你要用到1024個位元組,轉成base64也有170個字元。又比如,認證碼的使用者都是體力勞動者,但你非要做得頂級黑客都無法攻破,感覺就沒有意義了。以下所說的幾種認證碼,都是我工作過程中遇到過的,把設計方法分享給大家:
第一種、裝置動態密碼
這裡介紹的密碼是用在那種cpu是微控制器、plc的機器上的。我們會遇到一種這樣的情況:在機器的螢幕上,你可以看到一些資料,但如果你想進入高階設定,你就需要輸入乙個8位的密碼。但問題很快就來了,你不小心被別人看到了密碼,然後這個密碼很快就傳播開來了。這樣的密碼等於沒有密碼了。所以我們這裡提出了這樣的設計需求:
(1)密碼只能是阿拉伯數字,而且不能太長,一般要求10位以下,否則記不住,或讓人感覺厭煩。
(2)密碼包含使用者資訊,系統能知道是誰對裝置進行了操作。
(3)密碼是動態的,每次都不一樣。
(4)密碼能夠防止惡意篡改。
第二種、普通的軟體註冊碼
有幾種情況:
(1)軟體生成乙個機器碼,交給開發者,開發者提供乙個註冊碼。
(2)把使用者名稱交給開發者,開發者提供乙個註冊碼。
(3)直接向開發者索取乙個註冊碼。
雖然情況看似不同,但其實演算法是基本一致的。而且,很多時候,註冊碼裡面還應包含過期資訊。
第三種、通過檔案去註冊
當然,第二種方法把註冊碼放在檔案裡就是了。一般情況下,第二種方法的註冊碼是可抄的,也就是說不會太長,只有數字和少量字母等等。而第三種方法用到的檔案,可以存放更多的資訊,一般安全性會更高一些。
後面的章節詳細說明三種場合所使用的演算法。
機器碼 序列號 認證碼 註冊碼的生成演算法(五)
非對稱加密自然是要更安全的,因為軟體裡沒有私鑰。但該方法最大的缺點就是金鑰太長,註冊碼太長,無法手抄。鑑於我們假設破解者是無法對軟體反編譯的,使用對稱加密也未嘗不可。流程跟上一節提到的基本一致。加密方法可以使用des,金鑰最短是64位,也就是16個字元。明文資訊最長是7個位元組,我們用4個位元組存放...
PLSQL Developer 註冊碼 序列號
1.先註冊 version 7.1.1.1339 01.45678 5user license pl sql developer version 7.1.4 released 正版註冊正版註冊 product code at46 mutg qjwf l9h6 7zfm xy serial numbe...
C 生成註冊碼
string t datetime.now.ticks.tostring t deskey.desencrypt t,deskey.deskeystr string strid new string t.length for int i 0 i t.length i 把字元賦給陣列 string s...