如何用JAVA生成注冊序列號


原文:http://blog.csdn.net/eagleking012/article/details/7099900

平常我們都接觸過軟件注冊,輸入序列號、激活碼、注冊碼、授權碼;對於這些字符碼到底代表什么含義不甚了解,但一般來說,這些字符碼中都有幾個特點:

1、唯一性,肯定是一個唯一的序列號,否則就會存在濫用的問題。

2、加密性,肯定是經過加密或者混亂的,防止大家自己生成序列號。

3、解密性,軟件自身肯定可以解密,否則無法驗證合法性。

4、可讀性,序列號一般都比較標准,方便書寫和記憶,所以一般都為數字和字母。

 

這些特征是如何保證的呢?

1、唯一性,我們可以引用一些動態因子,如時間、IP、串號等信息,這就保證了軟件環境的唯一性。

2、加密性,有很多方法,可以用DES、AES進行對稱加密,也可以用RSA進行非對稱加密。

3、解密性,這時候就不能用MD5加密了,否則序列號內的信息是不可逆的,一般軟件和注冊碼都是分開的,軟件中事先設定好密鑰才可以解密。

4、可讀性,可以通過hex算法將字符串都轉換為字母。

 

 

前三個特征有很多方法可以參考,第4點雖然簡單,但是對於新手可能不怎么了解,以下給出簡單示例:

[java]  view plain copy print ?
 
  1. /** 
  2.  * byte轉哈希 
  3.  * @param b 
  4.  * @return 
  5.  */  
  6. public static String byte2hex(byte[] b) {  
  7.     String hs = "";  
  8.     String stmp = "";  
  9.     for (int n = 0; n < b.length; n++) {  
  10.         stmp = Integer.toHexString(b[n] & 0xFF);  
  11.         if (stmp.length() == 1)  
  12.             hs += ("0" + stmp);  
  13.         else  
  14.             hs += stmp;  
  15.     }  
  16.     return hs.toUpperCase();  
  17. }  
  18.   
  19. /** 
  20.  * 哈希轉byte 
  21.  * @param b 
  22.  * @return 
  23.  */  
  24. public static byte[] hex2byte(byte[] b) {  
  25.     if ((b.length % 2) != 0)  
  26.         throw new IllegalArgumentException("長度不是偶數");  
  27.   
  28.     byte[] b2 = new byte[b.length / 2];  
  29.   
  30.     for (int n = 0; n < b.length; n += 2) {  
  31.         String item = new String(b, n, 2);  
  32.         b2[n / 2] = (byte) Integer.parseInt(item, 16);  
  33.     }  
  34.     return b2;  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM