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


    今天是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 ....

    这样的数字无法遍历,

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

    今天就写到这里。谢谢!

  • 相关阅读:
    Identification of Key Nodes Based on Integrating of Global and Local Information论文
    Elasticsearch7.13.2 + Kibana7.12.2
    Ubuntu16.0.4 加第二块扩展盘
    nginx 配置静态文件
    MySQL5.7密码策略
    io_uring接口(函数)使用简介
    mac相关记录
    新服务器装机收集
    04 Spring中BeanFactory与ApplicationContext接口及实现类特点
    DevExpress.XtraSpreadsheet.SpreadsheetControl 滚动到指定位置
  • 原文地址:https://www.cnblogs.com/hznet/p/4453112.html
Copyright © 2020-2023  润新知