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
看看这里。您将在此处看到密码是如何生成的。
y
是 bcrypt hashes
上的默认(也是首选)前缀。至于代码,您需要查看 JUserHelper's
hashPassword
和 verifyPassword
方法以了解 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
查看链接,希望对您有所帮助;)
我不知道 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
看看这里。您将在此处看到密码是如何生成的。
y
是 bcrypt hashes
上的默认(也是首选)前缀。至于代码,您需要查看 JUserHelper's
hashPassword
和 verifyPassword
方法以了解 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
查看链接,希望对您有所帮助;)