使用PHP创建TYPO3加密密码?

6
我正在尝试在一个未安装TYPO3的外部网站上创建一个自定义注册组件(只使用其数据库)。问题是我没有使用TYPO3的经验。我想知道是否有人知道如何为TYPO3创建正确的密码加密方法?密码看起来像这样: $P$CeO/XYcbzRH9nLpCwKdp1HhsJGwJum0
我正在寻找一个能够创建相同加密并检查密码的PHP代码。我有从Install工具中获得的加密密钥,它被用于盐值。
或者,有没有可能仅保存密码为MD5?虽然这不是最好的选择,但也许是唯一的选择。
我找到了这个URL:http://srv123.typo3.org/TYPO3/Extensions/saltedpasswords/4.6/#compatibility-of-other-extensions-with-salted-user-password-hashes,但我不知道如何将其实现到我的脚本中。

1
不要加密密码!这些天到处都有泄漏,因为开发人员认为他们需要解密密码... 同样不要使用MD5(),它已经被破解了。同时请查看这个问题https://dev59.com/yHRC5IYBdhLWcg3wJNYN - Ron van der Heijden
3个回答

15

可在 typo3 6.X 上使用:

    $password = 'XXX'; // plain-text password
    $saltedPassword = '';

    if (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('saltedpasswords')) {
        if (\TYPO3\CMS\Saltedpasswords\Utility\SaltedPasswordsUtility::isUsageEnabled('FE')) {
            $objSalt = \TYPO3\CMS\Saltedpasswords\Salt\SaltFactory::getSaltingInstance(NULL);
            if (is_object($objSalt)) {
                $saltedPassword = $objSalt->getHashedPassword($password);
            }
        }
    }

8
请查看开发者指南:

1.5.1 从给定的明文密码创建一个新的盐值用户密码哈希

您需要在typo3前端使用它:

$password = 'XXX'; // plain-text password
$saltedPassword = '';

if (t3lib_extMgm::isLoaded('saltedpasswords')) {
  if (tx_saltedpasswords_div::isUsageEnabled('FE')) {
    $objSalt = tx_saltedpasswords_salts_factory::getSaltingInstance(NULL);
    if (is_object($objSalt)) {
      $saltedPassword = $objSalt->getHashedPassword($password);
    }
  }
}

但是,您不应该尝试在TYPO3之外生成加盐密码,因为加密取决于您的TYPO3设置。


1
这正是问题所在。我不想在Typo3前端使用它。 - Switching Brains

2
通过提供的哈希值,我猜测 TYPO3 中负责在数据库中存储盐值哈希的 saltedpasswords 扩展设置为使用 phpass。因此,您应该能够使用此类并将其用于您的脚本,以与 TYPO3 相同的方式创建/检查密码。 或者有没有可能仅保存密码为 MD5? 是的,在 TYPO3 中使用盐值密码是可选的,而不是强制性的。但是,如果将来的任何 TYPO3 安装都要使用该数据库,我不确定 TYPO3 在某些记录的密码存储为未加盐哈希值,而另一些记录存储为加盐哈希值时如何处理混合记录。我的猜测是,它会优雅地处理它,并识别每个哈希值要使用哪个检查。

你在问题中没有解释为什么要使用TYPO3数据库,它是否已经包含了一些记录,并且将来是否会被某个TYPO3安装所使用,因此我的答案可能不完全准确。 - tmt
数据库仅用于前端用户登录到其他网站查看某些页面。注册等操作都在Typo3网站上处理。这就是为什么我只需要加盐密码的原因。至于仅使用MD5,我可以直接将MD5密码放入数据库中。登录后,Typo3会自动将MD5转换为加盐密码。 - Switching Brains
谢谢cascaval,这正是我需要的答案,指导了我正确的方向。盐值密码确实设置为使用phpass。我在http://www.openwall.com/phpass下载了框架并成功创建了哈希值,可以与数据库中的哈希值进行比较。我需要设置`$hash_portable = TRUE;`就完成了。非常感谢你的帮助。 - Switching Brains

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接