首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CakePHP中的唯一令牌

CakePHP中的唯一令牌
EN

Stack Overflow用户
提问于 2013-07-27 14:52:52
回答 4查看 6.2K关注 0票数 2

在CakePHP中插入记录时,我需要创建真正唯一的令牌。这个表可以包含数百万行,所以我不能仅仅基于一些随机生成的字符串。我也不想使用microtime(),因为可以同时提交两个记录的可能性很小。当然,最好的解决方案是使用String::uuid(),但是来自cakephp文档。

uuid方法用于根据RFC 4122生成唯一标识符。uuid是一个128位字符串,格式为485fc381-e790-47a3-9794-1337c0a8fe68。

因此,据我所知,它不使用蛋糕的安全盐为其一代。因此,我决定通过安全组件的散列函数(或Auth密码函数)对其进行散列,因为我需要它是唯一的,同时非常非常安全。但后来我发现了这个问题,说这不是个好主意,而是针对php和md5。为什么MD5'ing一个UUID不是一个好主意?

而且,我还认为由安全组件进行散列的字符串很难猜测--因为,例如,String::uuid() in for循环中有这样一个输出

代码语言:javascript
运行
复制
for ($i = 0; $i < 30; $i++) {
    echo String::uuid()."<br>";
}       
die;

// outputs
51f3dcda-c4fc-4141-aaaf-1378654d2d93
51f3dcda-d9b0-4c20-8d03-1378654d2d93
51f3dcda-e7c0-4ddf-b808-1378654d2d93
51f3dcda-f508-4482-852d-1378654d2d93
51f3dcda-01ec-4f24-83b1-1378654d2d93
51f3dcda-1060-49d2-adc0-1378654d2d93
51f3dcda-1da8-4cfe-abe4-1378654d2d93
51f3dcda-2af0-42f7-81a0-1378654d2d93
51f3dcda-3838-4879-b2c9-1378654d2d93
51f3dcda-451c-465a-a644-1378654d2d93
51f3dcda-5264-44b0-a883-1378654d2d93

所以,毕竟字符串的某些部分是相似的,但是在使用散列函数时,结果是非常不同的。

代码语言:javascript
运行
复制
echo Security::hash('stackoverflow1');
echo "<br>";
echo Security::hash('stackoverflow2');

die;
// outputs
e9a3fcb74b9a03c7a7ab8731053ab9fe5d2fe6bd
b1f95bdbef28db16f8d4f912391c22310ba3c2c2

因此,问题是,我是否可以在Cake中散列uuid()?或者什么是获得真正独特和散列(根据我的安全盐)安全令牌的最佳安全方式。

更新

说到安全令牌,我的意思是猜测是多么困难。UUID确实是唯一的,但是从上面的例子来看,有些记录有一些相似之处。但是,散列的结果并非如此。

谢谢!!

EN

Stack Overflow用户

回答已采纳

发布于 2013-09-17 07:42:41

我想出了以下解决方案

由于连接当前时间(以微秒为单位)和随机字符串的哈希(散列)而使用字符串

代码语言:javascript
运行
复制
$timeStr = str_replace("0.", "", microtime());
$timeStr = str_replace(" ", "", $timeStr);
echo Security::hash('random string').'_'.$timeStr;

// 5ffd3b852ccdd448809abb172e19bbb9c01a43a4_796473001379403705

因此,字符串的第一部分(散列)将导致令牌的不可猜测性,而第二部分将保证其唯一性。

希望这个能帮到别人。

票数 1
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17899091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档