原文: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. * 哈希转byte
  20. * @param b
  21. * @return
  22. */
  23. public static byte[] hex2byte(byte[] b) {
  24. if ((b.length % 2) != 0)
  25. throw new IllegalArgumentException("长度不是偶数");
  26. byte[] b2 = new byte[b.length / 2];
  27. for (int n = 0; n < b.length; n += 2) {
  28. String item = new String(b, n, 2);
  29. b2[n / 2] = (byte) Integer.parseInt(item, 16);
  30. }
  31. return b2;
  32. }

如何用JAVA生成注册序列号的更多相关文章

  1. java生成随机序列号

    1.java生成随机序列号 String deleteUuid = UUID.randomUUID().toString(); 引用Jar包 //java-uuid-generator-3.1.3.j ...

  2. 如何用java生成随机验证码

     1.VerifyCode 类:   1 package com.HRuinger.enity;                          ImageIO.write(image, " ...

  3. 【Android】java生成炫酷验证码,不区分大小写。登陆,发送手机验证码,防止注册机,android开发

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 微博:http://weibo.com/mcxiaobing 首先给大家看一下 ...

  4. Java生成验证码原理(jsp)

     验证码的作用: 验证码是Completely Automated Public Turing test to tell Computers and Humans Apart(全自动区分计算机和人类的 ...

  5. 如何用Java编写一段代码引发内存泄露

    本文来自StackOverflow问答网站的一个热门讨论:如何用Java编写一段会发生内存泄露的代码. Q:刚才我参加了面试,面试官问我如何写出会发生内存泄露的Java代码.这个问题我一点思路都没有, ...

  6. 利用Java生成UUID

    UUID是什么? UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领域的一部分.其目的,是 ...

  7. java生成兑换码礼包码--工具类

    import java.util.HashSet; import java.util.Random; import java.util.Set; public class GenSerial { pr ...

  8. POI以SAX方式解析Excel2007大文件(包含空单元格的处理) Java生成CSV文件实例详解

    http://blog.csdn.net/l081307114/article/details/46009015 http://www.cnblogs.com/dreammyle/p/5458280. ...

  9. java 生成Excel开门篇

    本随笔的Excel所用的poi jar包(3.17版本)链接: https://pan.baidu.com/s/1gaa3dJueja8IraUDYCSLIQ 提取密码: 9xr7 简单实现:两个类: ...

随机推荐

  1. poj1226,poj3080

    看来以后用pascal的函数要小心了: 简简单单pos其实时间复杂度是二次方级的…… 今天学习的是KMP——字符匹配算法: 这两道题也都很简单,都是为这个算法练手的, 最朴素的匹配显然是穷举起始位置然 ...

  2. 关于C#控制台传递参数和接收参数

    前言: 写了这么久程序,今天才知道的一个基础知识点,就是程序入口 static void Main(string[] args) 里的args参数是什么意思 ?惭愧... 需求: 点击一个button ...

  3. BMap介绍

    API引用路径: <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&am ...

  4. Tomcat配置HTTPS方式

    简要记录主要步骤备忘 1.进入到jdk下的bin目录 2.输入如下指令 keytool -v -genkey -alias tomcat -keyalg RSA -keystore d:/tomcat ...

  5. LeetCode Pascal's Triangle II (杨辉三角)

    题意:给出杨辉三角的层数k,返回最后一层.k=0时就是只有一个数字1. 思路:滚动数组计算前一半出来,返回时再复制另一半.简单但是每一句都挺长的. 0ms的版本: class Solution { p ...

  6. 使用Busybox-1.2.0制作根文件系统

    使用Busybox-1.2.0制作根文件系统 cross-3.3.2 make-3.8.1 STEP 1: 创建根文件系统目录,主要包括以下目录/bin,/etc,/dev,/mnt,/sbin,/u ...

  7. C# 等待另外一个窗体关闭,再进行主线程的代码

    方法1 用Form类或其子类的showDialog方法. 比如你在form1里有一个按扭,然后你在Form1的点击事件里写上显示form2的代码: Form2 frm=new Form2(); frm ...

  8. Myeclipse *.link用法

    引用路径 path=D:\\ProgramData\\MyEclipse\\adt

  9. e2e 自动化集成测试 环境搭建 Node.js Selenium WebDriverIO Mocha Node-Inspector

    Node.js已经出来了许多年载,至今才开始接触.周未在家闲来无事,一时心血来潮,Google了大量的文章,经过实验,终于可以把整个环境给搭起来, 废话不多话,请看步骤. 特别注意, 本文章是针对Wi ...

  10. 使用asp.net MVC4中的Bundle遇到的问题及解决办法

    背景 之前有过使用MVC3的经验,也建过MVC4的基本样例看过,知道有bundle这么一个方法. 近日想建个网站使用MVC4,但是我觉得在基本样例上改不好,有太多无用的东西,所以就建了一个空白的MVC ...