欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php有哪些加解密快的方法可以加密uid等id?

程序员文章站 2022-05-05 23:37:09
...
以前一直都是直接把id作为get参数在前端各种传,比如a.com?uid=16这样的地址,如果用户发现了这个规律,只要把16改成17、18、19等等,就可以查看各个用户的数据了,所以想问问你们是怎么解决的?

需求不是说不允许用户查看其它用户的资料,而是谁都可以看。那为什么还有这种需求呢?这就好像是微信的微信号一样,只要有了微信号就能搜到那个人,没有微信号,也很难通过撞库、运气等找到那个人。优酷、土豆、B站,所有视频网站都没有直接把视频的id显示到地址栏上的,都是经过加密的。(如果视频网站在数据库是不用连续id的,那当我没说过...事实上我也的确没看过上述网站的数据库)


要求是,加解密速度快,破解难。(前者优先)

回复内容:

以前一直都是直接把id作为get参数在前端各种传,比如a.com?uid=16这样的地址,如果用户发现了这个规律,只要把16改成17、18、19等等,就可以查看各个用户的数据了,所以想问问你们是怎么解决的?


需求不是说不允许用户查看其它用户的资料,而是谁都可以看。那为什么还有这种需求呢?这就好像是微信的微信号一样,只要有了微信号就能搜到那个人,没有微信号,也很难通过撞库、运气等找到那个人。优酷、土豆、B站,所有视频网站都没有直接把视频的id显示到地址栏上的,都是经过加密的。(如果视频网站在数据库是不用连续id的,那当我没说过...事实上我也的确没看过上述网站的数据库)


要求是,加解密速度快,破解难。(前者优先)

是这样的,如果你的目的是防止用户查看别的用户的数据,那么你的思路是有点偏差的。

你应该要做的是在后端做鉴权而不是去加密 uid。举个例子,比如说现在已登录的用户是 uid=16,那么当他请求 a.com?uid=17(或者其他非 16 的页面),后端应该能判断出他没有权限并给出相应的返回(如输出空白页面,或者是直接抛 403 之类)。
至于说怎么去实现鉴权,简单的就是把已登录用户的 uid 记录在 $_SESSION['uid'] 里,每次请求的时候判断 $_GET['uid'] == $_SESSION['uid'] 是否为真。


2016-10-26 21:51 补充: 题主更新了题目说需求是谁都可以看到用户资料,只是想把用户的 uid 隐藏起来。遇到这种情况,我的做法是在用户表增加一个字段 openid 并将其加入索引,在用户注册时可以通过 uidUNIX 时间戳若干长度的随机字符串 等组合后通过 md5() 一类的函数来生成一个唯一的 openid,对外公开资料的情况下就通过 openid 来检索数据。


如果你坚持要用加密的方式,可以自己到网上搜一下,已经有很多现成的成熟的解决方案了,我用 PHP加解密 为关键词在 Google 搜索,第一页几乎全都是你想要的东西,例如下面这段代码摘自搜索结果中的第一条,你可以参考(我未做测试)。

出处:http://jerry17768java.blogspo...

hash some+random some

我觉得你应该加入的是权限判断的功能,比如根据cookie识别用户.
加/解密可以用OpenSSL AES:

相关标签: php