首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较加密密码mysql/php

问比较加密密码mysql/php
EN

Stack Overflow用户
提问于 2014-03-20 14:44:33
回答 3查看 1.5K关注 0票数 0

数据库以下列方式加密密码:

代码语言:javascript
复制
encrypt('password', CONCAT('$', MD5(RAND()))));

我在PHP中选择这个值,我想将它与用户输入进行比较。那么,我如何在PHP中重新创建上面的内容呢?我不明白的是,如果加密密码依赖随机数,那么如何在php中生成相同的字符串并将其与原始字符串进行比较呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-20 15:04:22

MySql函数encrypt()似乎使用Unix crypt()函数。在这种情况下,您很可能会创建不安全的DES散列,而"salt“将作为结果哈希值的一部分存储。为了进行验证,您可以使用PHP函数,如下所示:

代码语言:javascript
复制
$isPasswordCorrect = crypt($password, $existingHashFromDb) === existingHashFromDb;

请注意,以这种形式存储密码是非常不安全的,因为这种哈希算法对于散列密码来说太快了。相反,您应该使用类似于BCrypt的密钥派生函数,PHP具有自己的函数散列():

代码语言:javascript
复制
// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT);

// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($password, $existingHashFromDb);
票数 0
EN

Stack Overflow用户

发布于 2014-03-20 14:49:08

最好的方法是在数据库站点上使用存储过程或函数,为用户/pass查询返回true/false。那样的话,你就只能在一个快乐中拥有一个功能了。

即使您不想创建其中之一,也不希望在db查询中使用相同的funcions,是由php生成的。

票数 0
EN

Stack Overflow用户

发布于 2014-03-20 14:50:25

您说得对,没有办法在php中重新创建密码,因为mysql函数中没有提供salt。我希望的是在mysql和php中提供相同的盐。确保将此值保存在安全的位置。

每个mysql加密文档:

使用Unix ()系统调用对str进行加密,并返回二进制字符串。salt参数必须是至少两个字符的字符串,否则结果将为NULL。如果不给出盐参数,则使用随机值。

注意最后一部分:如果没有给出salt参数,则使用一个随机值(您的情况)。

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

https://stackoverflow.com/questions/22536482

复制
相关文章

相似问题

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