gpt4 book ai didi

PHP crypt() 和 Coldfusion

转载 作者:行者123 更新时间:2023-11-29 06:08:19 25 4
gpt4 key购买 nike

我们正在从 PHP 和 MySQL 转移到纯 CF/MSSQL 平台,我想把我们的用户帐户从 MySQL 带走。

用户帐户最初是在 PHP/MySQL 站点上创建的,并使用 8 个字符的 salt 和 MD5 加密的密码存储,如下所示:

  • 用户代码:ISzYi6zf
  • 密码:$1$ISzYi6zf$prff0mAKPVBHNKOlRradj1

有了我已知的盐和加密密码,我希望能够从 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 中可用的信息如下:

  • 用户邮箱:oli@xxx.com
  • 用户代码:$1$xxxxxxxx$
  • 用户密码:$1$xxxxxxxx$xxxxxxx

用户密码的形式为 $1$xxxxxxxx$prff0mAKPVBHNKOlRradj1 - 34 个字符,包括前置的用户代码。

目前,我们通过让 CF 将原始用户输入(电子邮件 + 密码)以及检索到的 user_code(PHP 用于加密 crypt 函数)发送到 PHP 页面以呈现密码并与数据库。

我基本上无法确定如何使用现有的盐在 CF 中准确呈现用户信息。

谢谢!

最佳答案

(免责声明:我不是 PHP 专家)。忽略基本的字符串函数,代码的关键部分似乎涉及两个函数:md5加密

地穴

据我所知,没有与 PHP 的 crypt() 等效的内置工具.但是,有一个 java implementation of that algorithm在 Apache Commons Codec 库中,可以从 CF 使用。下载最新版Apache Commons Codec **。然后通过 this.javaSettings 加载 jar 在您的 Application.cfc 文件中。加载后,您可以创建 Md5Crypt class 的实例并生成哈希。

冷聚变:

Md5Crypt = createObject("java", "org.apache.commons.codec.digest.Md5Crypt");
salt = "$1$ISzYi6zf$";
data = charsetDecode("some value to hash here", "utf-8");
result = Md5Crypt.md5Crypt(data, salt);
writeDump( Md5Crypt.md5Crypt(data, salt) );

PHP:

$salt = "$1$"."ISzYi6zf"."$";    
$data = "some value to hash here";
$result = crypt($data , $salt);
echo $result;

结果:

$1$ISzYi6zf$lqApYqSEt9fzpSDEZxuK00 

** Apache Commons Codec 与 CF 捆绑在一起。但是,捆绑的 jar 包含一个缩小版本,它缺少 MD5Crypt 类。

MD5

复制 md5 结果更简单。 CF 中的等效函数是 Hash() .唯一的区别是 CF 将结果转换为大写。使用 LCase()匹配 PHP 结果:

冷聚变:

salt1 = "ISzYi";
salt2 = "6zfXX";
password = "some value to hash here";
WriteOutput( lcase(hash(salt1 & password & salt2)) );

PHP:

$salt1 = "ISzYi";
$salt2 = "6zfXX";
$password = "some value to hash here";
echo( md5($salt1.$password.$salt2) );

结果:

c23d4661e1ef7866a4296658e3335dbc

关于PHP crypt() 和 Coldfusion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39978281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com