如何用JAVA生成注册序列号
2014-11-04 14:17
113 查看
原文: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 plaincopyprint?
/**
* byte转哈希
* @param b
* @return
*/
public static String byte2hex(byte[] b) {
String hs = "";
String stmp = "";
for (int n = 0; n < b.length; n++) {
stmp = Integer.toHexString(b
& 0xFF);
if (stmp.length() == 1)
hs += ("0" + stmp);
else
hs += stmp;
}
return hs.toUpperCase();
}
/**
* 哈希转byte
* @param b
* @return
*/
public static byte[] hex2byte(byte[] b) {
if ((b.length % 2) != 0)
throw new IllegalArgumentException("长度不是偶数");
byte[] b2 = new byte[b.length / 2];
for (int n = 0; n < b.length; n += 2) {
String item = new String(b, n, 2);
b2[n / 2] = (byte) Integer.parseInt(item, 16);
}
return b2;
}
平常我们都接触过软件注册,输入序列号、激活码、注册码、授权码;对于这些字符码到底代表什么含义不甚了解,但一般来说,这些字符码中都有几个特点:
1、唯一性,肯定是一个唯一的序列号,否则就会存在滥用的问题。
2、加密性,肯定是经过加密或者混乱的,防止大家自己生成序列号。
3、解密性,软件自身肯定可以解密,否则无法验证合法性。
4、可读性,序列号一般都比较标准,方便书写和记忆,所以一般都为数字和字母。
这些特征是如何保证的呢?
1、唯一性,我们可以引用一些动态因子,如时间、IP、串号等信息,这就保证了软件环境的唯一性。
2、加密性,有很多方法,可以用DES、AES进行对称加密,也可以用RSA进行非对称加密。
3、解密性,这时候就不能用MD5加密了,否则序列号内的信息是不可逆的,一般软件和注册码都是分开的,软件中事先设定好密钥才可以解密。
4、可读性,可以通过hex算法将字符串都转换为字母。
前三个特征有很多方法可以参考,第4点虽然简单,但是对于新手可能不怎么了解,以下给出简单示例:
[java] view plaincopyprint?
/**
* byte转哈希
* @param b
* @return
*/
public static String byte2hex(byte[] b) {
String hs = "";
String stmp = "";
for (int n = 0; n < b.length; n++) {
stmp = Integer.toHexString(b
& 0xFF);
if (stmp.length() == 1)
hs += ("0" + stmp);
else
hs += stmp;
}
return hs.toUpperCase();
}
/**
* 哈希转byte
* @param b
* @return
*/
public static byte[] hex2byte(byte[] b) {
if ((b.length % 2) != 0)
throw new IllegalArgumentException("长度不是偶数");
byte[] b2 = new byte[b.length / 2];
for (int n = 0; n < b.length; n += 2) {
String item = new String(b, n, 2);
b2[n / 2] = (byte) Integer.parseInt(item, 16);
}
return b2;
}
相关文章推荐
- 如何用JAVA生成注册序列号
- 如何用JAVA生成注册序列号
- 如何使用Java POI生成Excel表文件
- 如何将JAVA生成可执行文件?
- 如何将JAVA生成可执行文件
- Java如何每5秒生成一个随机数
- 第1章 Java基本概念及环境配置——FAQ1.16 如何将程序中的文档注释提取出来生成说明文档?
- 如何用 C 注册 windows 服务程序 (分析 Java Service Wrapper 代码)
- java中如何利用JSmooth生成EXE文件
- 如何使用Java POI生成Excel表文件 !
- Java程序如何生成mdb文件[MS Access]?
- java程序如何生成jar文件
- 如何将JAVA生成可执行文件?
- 如何使用Java POI生成Excel表文件 !
- 如何将JAVA生成可执行文件?http://www.nou.com.cn/cms/cxsj/5642/page.action
- 如何把JAVA工程生成一个.JAR文件,而不是一堆JAR(ECLIPSE生成JAR)
- 如何将做好的JAVA程序生成可执行文件
- JAVA中如何读取主板序列号或硬盘序列号或MAC地址
- 如何在你的java程序中注册系统级热键
- 如何用java随机生成一个汉字?