首次加密尝试
最近完成的项目和加密有关。
公司经常遇到客户拖欠货款的现象,这种情况在目前的天朝来说,单纯用法律手段还不够明智。于是终于考虑对产品加入一定的保密措施,说白了就是给那些信誉不好的用户设定试用期,当规定的付款时间到了,若用户还不履行,仪器所运行的软件自行加锁,并提示用户联系厂商。
刚开始,上头的意思是固定设几重密码,比如,半年提醒一次,一年的时候再提醒一次,想了想,这样也太机械了,程序的可维护性不好,也不够灵活。最理想的情况是,使用有时间限制的授权,就像现在常见的软件授权,有的可以使用半年,有的可以使用一年,有的则可以使用三年,有的可以终身使用。根据我们的情况,具体方案是:将产品的出厂编号和能使用到的日期结合到一起,通过某种可逆算法产生一个授权码,就是所谓的“序列号”。这个是生成过程。在仪器中,对授权码的验证是一个相反过程:对授权码解密,还原成编号和试用日期,通过对比产生的编号是否相同来判定授权是否合法。每次使用仪器,也会先判断是否试用期已到。这样根据用户的交款情况,给用户不同的授权码,直到履行完合同,再给用户一个终身授权。
基本方案出来了,后面就是具体实施,这里面最关键的是选用什么样的可逆算法,这个算法不必有多NX,但必须是可逆的。流行的加密算法有MD5, SHA-1 和 HMAC, Blowfish, Twofish,前三种是Hash类的,不可逆(据说现在MD5也可逆了?),OUT掉。后两种貌似都行,于是选择了一种。
前后大概用了两天时间,其实code的过程很简单,关键是方案的选择,上头对软件不太了解,一味听从上头的指示,到后来出了问题,受累的还是自己,到时候你有苦没处说。还不如在开始就多动下脑子,指出不合理的地方,这样对谁都好。虽然公司不是我做主,但起码的主动性还是要有的。不废话了,上个小图纪念一下,第一次尝试加密,大虾见了不要笑。
2 comments
Leave a reply