? alloy的許可證分成四個部分,每個部分之間用#號分隔,第一部分是許可證過期時間,第二部分是用戶名,第三和第四部分是兩個36進制的整數,其中第三部分是校驗碼,第四部分是一個隨機數(我是這么認為的,第四部分寫死成一個常量也沒有什么關系)。 ?
? ? ? 好了,了解了許可證的構造之后,我們來了解一下alloy檢驗許可證是否合法和過期的過程。 ?
? ? ? 一:分離許可證的各個部分。 ?
? ? ? 二:判斷日期部分的長度,如果長度大于1,就構造一個過期時間,否則過期時間為null。(這下子我們就可以通過使日期部分的長度不超過1來讓alloy永不過期了^-^)。 ?
? ? ? 三:調用Long.parseLong(String, ? int)方法解析出第三和第四部分兩個36進制整數的10進制的值。 ?
? ? ? 四:使用java.util.zip.CRC32來計算校驗值,計算的過程是把從第四部分得到的10進值整數對127取模,然后加上第一、二兩個部分(包括中間的#號),這樣就構造出一個字符串,然后調用CRC32.update()方法計算這個字符串的校驗值。 ?
? ? ? 五:使用getValue()方法從CRC32中取得校驗值,然后將這個校驗值與從第三部分獲得的10進制數值比較,如果相等,則校驗成功。隨后就是判斷當前日期是否過期的操作了。 ?
? ? ? 這大致就是alloy驗證許可證的過程,我們反過來做一遍,就可以得到我們自己的許可證了。下面就是我寫的構造許可證的方法,供大家參考。 ?
? ?
? public ? String ? generate(String ? user) ?
? { ?
? ? ? ? ? String ? exp ? = ? "x"; ?
? ? ? ? ? String ? rand ? = ? "torresg"; ?
? ? ? ? ? long ? l ? = ? Long.parseLong(rand, ? 36); ?
? ? ? ? ? CRC32 ? crc32 ? = ? new ? CRC32(); ?
? ? ? ? ? crc32.update((l ? % ? 127L ? + ? exp ? + ? "#" ? + ? user).getBytes()); ?
? ? ? ? ? String ? checksum ? = ? Long.toString(crc32.getValue(), ? 36); ?
? ? ? ? ? return ? exp ? + ? "#" ? + ? user ? + ? "#" ? + ? checksum ? + ? "#" ? + ? rand; ?
? } ?
? ?
? 另外就是過期時間不能為空,因為alloy中另外某個地方要對這個時間進行處理。為空的話也會驗證失敗。所以過期時間要使用一個長度為1的字符串。
com.incors.plaf.alloy.AlloyLookAndFeel.setProperty("alloy.licenseCode",
????"v#ej_technologies#uwbjzx#e6pck8");
??try {
???javax.swing.LookAndFeel alloyLnF = new com.incors.plaf.alloy.AlloyLookAndFeel();
???javax.swing.UIManager.setLookAndFeel(alloyLnF);
??} catch (javax.swing.UnsupportedLookAndFeelException ex) {
???// You may handle the exception here
???ex.printStackTrace();
??}