经过加密,我们得到了16个字节的数据。现在就要转换为显示字串,也就是CDKEY了。怎么转换呢?这是思路:
- 显示的字串,只能是26个字母+10个数字的全部36个或部分。比如说,0和O太类似,以前印刷时不容易区分,所以不用,就变成了34个。泰山OFFICE就使用的34个字符。。
- 我们把16字节看成一个数。非常大的数。
- 于是现在的思路就是:如何用34个字符,表示这个数?很简单啊,把10进制转换为34进制就可以了。
这个转换有点麻烦,可以利用已有的代码,比如JAVA直接提供了BigInteger进制操作。
再来谈谈转换后的位数。
- 16进制,即4个bit表示一个数,最后是32长。
- 32进制,即5个bit表示一个数,最后是26长。泰山OFFICE的开始方案就是这个。
- 34进制呢?不好意思,也是26长。
- 35、36进制,25长。
泰山OFFICE使用的是34进制,结果也是25长。这是怎么回事?因为吾用到了一个高级又简单的技巧。这个想想就明白了。如果想不出来,那也可以使用35、36进制。现在印刷水平好,完全能够区分0、O。
到了这里,CDKEY产生了,流程也介绍完毕了。是不是很简单?还有没有其他要注意的?