基于比特币地址生成算法的License生成器设计
License是版权许可证,相当于软件版权。它属于知识产权的著作权范畴,是软件反盗版、对正版用户授权的一种方式。软件序列号(Serial Number, 缩写是S/N)是软件授权给使用者的唯一标识符。每一台机器都有唯一的序列号,这是检查产品的重要依据,其作用主要是为了防止软件的非法复制、盗版。
序列号的生成原理:一般是以计算机硬件参数的唯一ID作为注册源,通过一定的算法形成所谓的注册码(s/n)。即通过对cpu、网卡或硬盘ID的加密处理得到软件序列号。之所以基于硬件参数是因为,如cpu序列号是一个建立在处理器内部、唯一的、不能被修改的编号。而硬盘ID是出厂时生产厂家为区别产品而设置的,用硬盘ID加密主要是利用其唯一和只读的特性。
序列号生成器的核心部分是其算法,当前序列号生成器算法一般是通过硬件参数获得机器码,然后利用MD5算法对其加密,得到32或16位MD5编码。然后再把编码分成4份即得到序列号。
一、总体设计
序列号生成器产生序列号的过程分为三个模块:提取硬件参数模块、生成序列号算法模块、输出序列号模块。
图1 总体设计流程二、生成流程
图2 序列号生成过程1.首先获取硬件参数信息,并将随机数作为密钥。
2.将硬件参数信息和密钥经过SECP256K1算法处理生成了公钥。
3.计算公钥的SHA256哈希值
4.取上一步结果,计算PIPEMD160哈希值。同SHA256一样PIPEMD160也是一种hash算法,由公钥可以计算得到公钥哈希,而反过来是行不通的。
5.将一个字节的地址版本号连接到公钥哈希的头部,然后对其进行两次SHA256运算,将结果的前4个字节作为公钥哈希的校验值,连接其尾部。
6.将上一步结果使用Base58进行编码,就得到了序列号。Base58编码为了让输出字符串易于辨别,所以编码时故意排除了4个字符: ‘0’、‘I’、‘l’、‘O’,如果你想生成一个带特殊词缀的地址那就不要带这4个符了。
三、验证流程
验证序列号流程如图3所示:
图3 序列验证流程