Joomla 3.4密码生成方法

Joomla 3.4 password generation method

我不知道 Joomla 如何加密密码。我的问题是,我想像 Jommla 在一个简单的 php 页面中那样使用一个没有任何 OOP 方法的表单的确切方法。

这是我输入的密码: 测试

这是我在 Joomla 数据库中作为加密密码的输出: $2y$10$XXrVok3/3Otqg6FmqFzUmObA.rLpLt.BswwSJ7d.iCPoGSJtcqSvm

我发现它可能与 BLOWFISH 加密有关,但它需要其他东西(例如:生成的盐或数据库中我找不到的令牌)

您好,加密是由名为 'PasswordHash.php' 的 class 进行的,它在 joomla 中位于 libraries/phpass.

如果您想在 joomla 框架之外的 php 脚本中使用,您只能导入此 class。 这是一个例子:

<?php
require 'PasswordHash.php';
header('Content-type: text/plain');
$t_hasher = new PasswordHash(10, TRUE);
$correct = 'test';
$hash = $t_hasher->HashPassword($correct);
print 'Hash: ' . $hash . "\n";
//Get password to check from get variable
$p=$_GET['p'];
//check if is correct
$check = $t_hasher->CheckPassword($p, $hash);
if ($check){
    print 'CORRECT PASSWORD';
    }
else {
    print 'WRONG PASSWORD';
    }
?>

然后用 yourcriptname.php?p=PASSWORDTOCHECK 调用这个脚本。

在这里您可以找到 class http://www.openwall.com/phpass/

的文档

谢谢您的回复

我在我的页面中使用了您的代码和一个表单,但输出($hash)与我想要的不一样

    <?php
    require 'PasswordHash.php';
    if(isset($_POST['send'])) {
    $t_hasher = new PasswordHash(10, TRUE);

    $correct = $_POST['pass'];

    $hash = $t_hasher->HashPassword($correct);

    print 'Hash: ' . $hash . "\n";
    }
?>

<form action="" method="post">

    <input type="text" name="pass">

    <input type="submit" name="send" value="send">

</form>

这是我的代码,class 在根目录中,所以它工作正常。 所以输出总是不同的,这个散列可能存储在代码或数据库中的某个地方以生成这个($2y$10$XXrVok3/3Otqg6FmqFzUmObA.rLpLt.BswwSJ7d.iCPoGSJtcqSvm)密码

Joomla!使用 PhPass.

root/libraries/phpass/PasswordHash.php

看看这里。您将在此处看到密码是如何生成的。

ybcrypt hashes 上的默认(也是首选)前缀。至于代码,您需要查看 JUserHelper's hashPasswordverifyPassword 方法以了解 Joomla 现在是如何处理的。

一些参考文献 -

https://github.com/joomla/joomla-cms/blob/3.4.1/libraries/joomla/user/helper.php#L296-L387

https://docs.joomla.org/API15:JUserHelper/getCryptedPassword

https://docs.joomla.org/API15:JUserHelper/getSalt

查看链接,希望对您有所帮助;)