我无法了解Joomla如何加密密码。我的问题是,我想在一个带有表单的简单php页面中使用Jommla所做的精确方法,而不需要任何OOP方法。
所以这是我输入的密码: 测试
这是我在Joomla数据库中作为加密密码的输出: $ 2Y $ 10 $ XXrVok3 / 3Otqg6FmqFzUmObA.rLpLt.BswwSJ7d.iCPoGSJtcqSvm
我发现它可能与BLOWFISH加密有关,但它需要其他东西(例如:生成的盐或数据库中的令牌,我找不到)
答案 0 :(得分:3)
的Joomla!使用PhPass
。
root/libraries/phpass/PasswordHash.php
看看这里。你会在这里看到密码是如何生成的。
$2y
是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
检查链接,希望你能帮到你;)
答案 1 :(得分:1)
加密是由名为'PasswordHash.php'的类加密的,joomla位于libraries / phpass下。
如果你想在joomla框架中使用php脚本,你只能导入这个类。 这是一个例子:
<?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。
您可以在此处找到课程http://www.openwall.com/phpass/
的文档答案 2 :(得分:0)
谢谢你的回复
我在页面中使用你的代码表单,但输出($ 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>
这是我的代码,类在根目录中,所以它工作正常。 所以输出总是不同的,这个哈希可能存储在代码或数据库中的某个位置以生成这个($ 2y $ 10 $ XXrVok3 / 3Otqg6FmqFzUmObA.rLpLt.BswwSJ7d.iCPoGSJtcqSvm)密码