zoukankan      html  css  js  c++  java
  • 如何用JAVA生成注册序列号

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

    平常我们都接触过软件注册,输入序列号、激活码、注册码、授权码;对于这些字符码到底代表什么含义不甚了解,但一般来说,这些字符码中都有几个特点:

    1、唯一性,肯定是一个唯一的序列号,否则就会存在滥用的问题。

    2、加密性,肯定是经过加密或者混乱的,防止大家自己生成序列号。

    3、解密性,软件自身肯定可以解密,否则无法验证合法性。

    4、可读性,序列号一般都比较标准,方便书写和记忆,所以一般都为数字和字母。

    这些特征是如何保证的呢?

    1、唯一性,我们可以引用一些动态因子,如时间、IP、串号等信息,这就保证了软件环境的唯一性。

    2、加密性,有很多方法,可以用DES、AES进行对称加密,也可以用RSA进行非对称加密。

    3、解密性,这时候就不能用MD5加密了,否则序列号内的信息是不可逆的,一般软件和注册码都是分开的,软件中事先设定好密钥才可以解密。

    4、可读性,可以通过hex算法将字符串都转换为字母。

    前三个特征有很多方法可以参考,第4点虽然简单,但是对于新手可能不怎么了解,以下给出简单示例:

    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;  
  • 相关阅读:
    Tool工具页面代码
    Tool工具生成代码数据库Model生成代码
    类别切换 分页
    ASP.NET AJAX无刷新验证用户名
    VSS的配置和使用
    js 常用方法大全
    灵异——1995年北京330路公交车失踪案
    C#用HttpWebRequest通过代理服务器验证后抓取网页内容 。。。。。
    win2003远程 客户端无法连接到远程计算机。
    .net中点击button按钮显示下一条记录(上一条 下一条)
  • 原文地址:https://www.cnblogs.com/tc310/p/4073601.html
Copyright © 2011-2022 走看看