创业日记-使用数学方法解决实际问题
2015-04-24 12:22
666 查看
今天是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 ....
这样的数字无法遍历,
这样的数学公式在实际的开发中能够很巧妙的解决问题。
今天就写到这里。谢谢!
有十天没有写日志了。
这几天解决了一个之前困扰我久的问题
在实际的开发中一个问题解决与巧妙的解决有着很大的不同
实际的场景:
我们的用户会公开一个简历页面,这个页面会跟随用户的标识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 ....
这样的数字无法遍历,
这样的数学公式在实际的开发中能够很巧妙的解决问题。
今天就写到这里。谢谢!
相关文章推荐
- Android Studio该如何导入别人的开源库到自己的项目中并使用库中的控件,网上找过方法但是并不能搞定,希望实际问题 实际解决,拯救我这个傻瓜
- Kafka实际使用过程中遇到的一些问题及解决方法
- 在使用ifconfig命令时出现了无法安装的问题,解决方法
- 关于Linux系统下在使用close关闭串口设备时引起的内核崩溃问题解决方法
- 使用autogen生成应用程序遇到问题及解决方法
- 【SQLSEVER2008连接】使用telnet 127.0.0.1 1433 连接失败问题解决方法
- 使用lnmp安装Nextcloud出现404问题解决方法
- 使用speex动态链接库过程中遇到问题及解决方法
- Mac上使用Semafor语义解析器——我遇到的问题及解决方法
- You have an error in your SQL syntax; 问题的实际解决方法
- openwrt使用glibc时区无法生效问题解决方法
- 应用程序无法正常启动0xc0000142) 关于win10周年版更新后无法正常使用vc6.0问题的解决方法
- DHCP实际使用两个问题的解决办法及实验验证
- QT 5.9版本 使用MSVC2015编译时出现中文字符乱码问题的解决方法
- 在使用 Spring Security 的 Remember Me 记住密码功能时遇到的问题和解决方法
- Win10下python3和python2同时安装并解决pip共存问题 特别说明,本文是在Windows64位系统下进行的,32位系统请下载相应版本的安装包,安装方法类似。 使用python开
- thinkphp使用http::download下载word或者ppt文件乱码问题的解决方法
- spark程序打包集群运行方法及使用中的几个问题解决
- java 中JFinal getModel方法和数据库使用出现问题解决办法