【发布时间】:2016-10-12 07:38:40
【问题描述】:
我们正在从 PHP 和 MySQL 迁移到纯 CF/MSSQL 平台,我想把我们的用户帐户从 MySQL 带走。
用户帐户最初是在 PHP/MySQL 站点上创建的,并使用 8 个字符的盐和 MD5 加密的密码存储,如下所示:
- 用户代码:
ISzYi6zf - 密码:
$1$ISzYi6zf$prff0mAKPVBHNKOlRradj1
有了我知道的 salt 和加密密码,我希望能够从 CF 中的用户输入“重建”34 个字符串,以与数据库中存储的内容进行比较。
到目前为止,我在 CF 中尝试过的任何事情都无法让我“重建”结果 34 个字符的字符串,以便我可以将它们与数据库中的内容进行比较,即。我正在寻找用户输入,向其中添加已知的盐,并提出一个 34 个字符的字符串以便比较它们。
感谢您的帮助!
更新:
@Leigh,这是 PHP 用来验证的代码:
<?
$user_salt = $_POST["user_salt"];
$password = $_POST["password"];
$pass_meth = $_POST["pass_meth"];
if(strlen($user_salt) > 8 && $pass_meth > 0)
{
list($salt1, $salt2) = str_split($user_salt, ceil(strlen($user_salt) / 2));
$salty_password = $salt1.$password.$salt2;
$pass_to_use = md5($salty_password);
}
else
{
if(strlen($user_salt) > 8)
{
$user_salt = "$1$".str_pad(substr($user_salt, 0, 8), 8, '0', STR_PAD_LEFT)."$";
}
else
{
$user_salt = "$1$".substr($user_salt, 0, 8)."$";
}
$pass_to_use = crypt($password, $user_salt);
}
echo $pass_to_use;
?>
我们在 MySQL DB 中可用的信息如下:
- user_email:
oli@xxx.com - 用户代码:
$1$xxxxxxxx$ - 用户密码:
$1$xxxxxxxx$xxxxxxx
用户密码的格式为 $1$xxxxxxxx$prff0mAKPVBHNKOlRradj1 - 34 个字符,包括附加的用户代码。
目前,我们通过让 CF 将原始用户输入(电子邮件 + 密码)以及检索到的 user_code(PHP 用来对 crypt 函数加盐)发送到 PHP 页面来呈现密码并与数据库。
我基本上不知道如何使用现有的 salt 在 CF 中准确呈现用户信息。
谢谢!
【问题讨论】:
-
为什么不直接导出(db)数据然后导入呢?不应该有任何损失/问题
-
另外,您能否给我们一个完整的示例(代码、纯文本、盐、散列结果),使用虚拟/丢弃值进行比较?
-
@Fred-ii-,我们的计划是将数据移动到 MS-SQL 服务器并完全转储 PHP/MySQL;我们希望完整地移动数据,并计划针对相同的数据进行身份验证,但使用 CF 而不是 PHP
-
@Leigh 这是 PHP 用来验证的代码:
标签: php mysql coldfusion coldfusion-11