首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php密钥管理

php密钥管理
EN

Stack Overflow用户
提问于 2012-09-26 12:39:57
回答 3查看 929关注 0票数 1

嗨,我在我的代码点火器应用程序中集成了memcache,我的查询更改了用户选择的值。像这样的事情

代码语言:javascript
复制
$sql='select * from user where user_name="'.$name.'" and location='".$location."'";
$result = $this->memcached_library->get(md5($sql));
if(!$result ){
       /*  execute query and get $result    */
       $this->memcached_library->add(md5($sql), $result );
}else{
       return $result;
}

这是我处理每个不同查询的键的方法。但是我听说md5()并不总是唯一的。

1>是md5()总是唯一的吗?

2>如果md5()不是唯一的,那么应该是另一种选择.

3> crc32()是独一无二的吗?

谢谢..。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-26 12:44:52

答:您的SQL是错误的,它应该是

代码语言:javascript
复制
 $sql = "select * from user where user_name = '{$name}' and location = '{$location}'";

B.您的代码可能有错误,因为MD5区分大小写

看见

代码语言:javascript
复制
var_dump(md5("A"),md5("a"));

输出

代码语言:javascript
复制
string '7fc56270e7a70fa81a5935b72eacbe29' (length=32)
string '0cc175b9c0f1b6a831c399e269772661' (length=32)

更好地使用strtolower

代码语言:javascript
复制
  $result = $this->memcached_library->get(md5(strtolower($sql)));

C,是MD5唯一的

MD5不能保证完全唯一性,但是在32位十六进制值(16^32)中有大约不同的3.402823669209387e+38值。这意味着,假设算法背后的数学给出了一个很好的分布,你的概率会非常小,会有一个重复。

更好的选择是使用sha1

代码语言:javascript
复制
$betterKey = "user" .  sha1(strtolower($sql));
               ^- identify request for each table
票数 4
EN

Stack Overflow用户

发布于 2012-09-26 12:47:26

在您的情况下,MD5是非常独特的。

但:

我在放弃它之前用了一段时间。为什么?

  1. 对于密码哈希,md5被认为太快了。但是它仍然是一个散列函数,每次您必须进行DB查询时,它可能会减慢您的代码速度。我在过去见过,对SQL查询进行散列以生成密钥是PHP执行时间的20%,这是很大的工作量。
  2. 如果需要删除或更新特定的密钥,例如,如果用户希望更改其位置,并且希望尽快反映此更改,则必须重新构建相同的DB查询,对其进行散列,以检索您的密钥。

我喜欢的解决方案:

用简单的、短的、有用的键代替。通常,使用模型中的方法名。如果示例中的方法是User::getUser($name, $location),则使用键:

代码语言:javascript
复制
$key = "User::getUser($name, $location)"

您根本不需要散列,它将更清晰,更容易管理密钥。

票数 3
EN

Stack Overflow用户

发布于 2012-09-26 12:49:37

你指的是碰撞漏洞 of MD5。为了实用,简单的使用,你可以忘记那些。因此,MD5( uniqid() )是唯一的。请参阅http://php.net/manual/en/function.uniqid.php

对于生成使用中的散列(如SessionID ),MD5()很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12601928

复制
相关文章

相似问题

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