JAVAで登録シリアル番号を生成する方法


普段、私たちはソフトウェアの登録に接触したことがあります.シーケンス番号、アクティブコード、登録コード、授権コードを入力します.これらの文字コードがどのような意味を表しているのかはよく分かりませんが、一般的には、これらの文字コードにはいくつかの特徴があります.
1、一意性は、一意のシリアル番号に違いない.そうしないと、乱用の問題がある.
2、暗号化性は、暗号化や混乱を経て、みんなが自分でシリアル番号を生成することを防止するに違いない.
3、解読性、ソフトウェア自身は必ず解読することができて、さもなくば合法性を検証することができません.
4、可読性、シリアル番号は一般的に標準的で、書くことと記憶するのに便利なので、一般的に数字とアルファベットです.
 
これらの特徴はどのように保証されていますか?
1、一意性、時間、IP、シリアル番号などの動的因子を引用することができ、ソフトウェア環境の一意性を保証する.
2、暗号化性、いろいろな方法があり、DES、AESで対称暗号化してもよいし、RSAで非対称暗号化してもよい.
3、解読性、この時MD 5で暗号化することができなくて、さもなくばシリアル番号内の情報は不可逆的で、普通のソフトウェアと登録コードはすべて別々で、ソフトウェアの中で事前に鍵を設定してやっと解読することができます.
4、可読性、hexアルゴリズムで文字列をすべてアルファベットに変換できます.
 
 
最初の3つの特徴には多くの方法が参考になります.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;
	}