如何用JAVA生成注册序列号

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

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

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

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

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

 

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

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

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

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

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

 

 

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

	/**
	 * 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[n] & 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;
	}


 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值