创业日记-使用数学方法解决实际问题

今天是2015年4月24日 深圳阴

 

有十天没有写日志了。

 

这几天解决了一个之前困扰我久的问题

 

在实际的开发中一个问题解决与巧妙的解决有着很大的不同

 

实际的场景:

我们的用户会公开一个简历页面,这个页面会跟随用户的标识Id,是一个长整型的数字

这个规则很简单,如果有人恶意要去遍历这个数字Id,哪么所有的用户简历都可以轻松拿到,这不是我们希望看到的局面

哪么如何解决这个问题:

1.给用户这个id加密

2.给用户生成一个随机的字符串

3.给用户产生一个GUID

首选给Id加密是我们第一个想到的办法,一开始我们想到用 AES 加密

AEC 加密时需要一个加密Key,同时数字Id要转成String类型,

Key的长度最少为16位 byte

这样加密出来的数据会显得很长, 一大串的字符,而且加密Key要妥善保管,

看起来这样实现有一些复杂,我们想用一种更轻的方法

 

接下来我们考虑了第2种与第3种,这两种原理都是一样。在创建用户时产生一个随机的串

使用GUID可以保证不会重复,使用自己写的随机算法可能会重复。但实际也可以避免,

这样结果是数据库多了一个字段。同时也要为这个字段做一个索引,理论上字符串的索引速度是没有数字索引速度快

而且程序实体类里输入输出都要增加一个字段。

 

我们不希望把工作搞这么复杂

 

哪么我们还是希望能过算法支解决这些问题

 

看看我们的id 是这样的

1,2,3,4,5,6,7,8,9,10

我们只是不想让别人遍历,也可以说就算他能遍历要增加他们难度

我们想到了使用园的面积公式

S=πr²

把数字Id当成圆的半径

经过计算后我们的数字已经变成一个面积值

就如同上图的周边的气体一样

3.1415926 12.5663704 28.2743334 ....

这样的数字无法遍历,

 

这样的数学公式在实际的开发中能够很巧妙的解决问题。

 

今天就写到这里。谢谢!

posted @ 2015-04-24 12:22  徐小朝  阅读(418)  评论(0编辑  收藏  举报