今天看到我们财务拿着一个类似U盘的东西,但没有插头,另外看到上面有一个电子屏,显示一串六位数字,问她是什么,她说是银行的口令卡,并且她说每隔一定时间会变!
于是想了一下,如果要实现这样的效果,应该有以下方面的因素
一是时间,估计是一分钟变一次,那就肯定是跟分钟有关
二是用户的随机密钥,这个密钥应该是在用户开卡(或是开动态口令卡)的时候创建的。
举个最简单的例子:
DateTime dt = DateTime.Now; int t = dt.Year + dt.Month + dt.Day + dt.Hour + dt.Minute; int rndkey = 100000; //用户随机密钥 string key = (t + rndkey).ToString(); Console.WriteLine(key.Substring(key.Length - 6, 6)); 打印末6位
加密算法是猜不出来了,但大致就这样
这种方法我在我的程序中用过,不过有个麻烦的地方,平均2到3天的机率会发生一次错误,就是当时间出现整分时的问题
比如现在是14:15:58秒,当在系统中输入显示的口令时,可能时间已经到了14:16:01,这时算出来的结果是不同的,口令也就失效了,那时我是用程序访问的,都会存在这个问题,如果中间还用了一个人去手工输入,这里的机率可能就更高了。
中银的人可能也发现了这个问题,所以在显示屏上做了另一点提示,一块类似手机电量指示的东西,如果只剩一格了,就表示这个口令马上要过期了,使用人员就要等几秒钟,等它换了再登陆。
说到最后,还是觉得这些东西对安全的提升度并不太明显,换个角度来说,因为现在的银行只支持IE,最主要的就是因为使用了ActiveX,如果是这样,直接在密码框做点手脚就行了!而且也不环保,如果银行要升级了,还得要换N多用户手上的这些口令卡,浪费!最重要的就是害了我们这些程序员,一个华而不实的东西,让客户以为很好,非要偶们做一样的东西,寒!!!