首次加密尝试

最近完成的项目和加密有关。

公司经常遇到客户拖欠货款的现象,这种情况在目前的天朝来说,单纯用法律手段还不够明智。于是终于考虑对产品加入一定的保密措施,说白了就是给那些信誉不好的用户设定试用期,当规定的付款时间到了,若用户还不履行,仪器所运行的软件自行加锁,并提示用户联系厂商。

刚开始,上头的意思是固定设几重密码,比如,半年提醒一次,一年的时候再提醒一次,想了想,这样也太机械了,程序的可维护性不好,也不够灵活。最理想的情况是,使用有时间限制的授权,就像现在常见的软件授权,有的可以使用半年,有的可以使用一年,有的则可以使用三年,有的可以终身使用。根据我们的情况,具体方案是:将产品的出厂编号和能使用到的日期结合到一起,通过某种可逆算法产生一个授权码,就是所谓的“序列号”。这个是生成过程。在仪器中,对授权码的验证是一个相反过程:对授权码解密,还原成编号和试用日期,通过对比产生的编号是否相同来判定授权是否合法。每次使用仪器,也会先判断是否试用期已到。这样根据用户的交款情况,给用户不同的授权码,直到履行完合同,再给用户一个终身授权。

基本方案出来了,后面就是具体实施,这里面最关键的是选用什么样的可逆算法,这个算法不必有多NX,但必须是可逆的。流行的加密算法有MD5, SHA-1 和 HMAC, Blowfish, Twofish,前三种是Hash类的,不可逆(据说现在MD5也可逆了?),OUT掉。后两种貌似都行,于是选择了一种。

前后大概用了两天时间,其实code的过程很简单,关键是方案的选择,上头对软件不太了解,一味听从上头的指示,到后来出了问题,受累的还是自己,到时候你有苦没处说。还不如在开始就多动下脑子,指出不合理的地方,这样对谁都好。虽然公司不是我做主,但起码的主动性还是要有的。不废话了,上个小图纪念一下,第一次尝试加密,大虾见了不要笑。

KeyMaker

This entry was posted on Saturday, September 19th, 2009 at 5:49 pm and is filed under 学习. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

2 comments

 No.1 
Kevin:

不错不错,你们的硬件编号用的哪些硬件生成的?

September 21st, 2009 at 4:47 pm
 No.2 

@Kevin
你的意思是硬件编号是根据什么算出来的吧?

我们的这个编号是人定的,不用软件算,比如XXXYYYZZZ,XXX代表产品种类,YYY代表日期,ZZZ代表序号,很简单。

PC上有些软件的注册是根据PC的硬件信息通过某种算法得出一个机器码,由机器码生成SN,和我们这个有点不同,但原理上还是一样的。

September 21st, 2009 at 9:31 pm

Leave a reply

Name (*)
Mail (will not be published) (*)
URI
Comment