CMS, 原创,

Joomla encryption and password authentication detailJoomla加密方式密码验证详解

joomla 根据版本的不同存在很多的加密方式。尤其是当站长自己整合的跟用户验证有关的模块后,升级joomla 可能会导致用户密码验证失败,这里总结出几种joomla加密方式来供站长们和开发者们参考,(版权所有转载必须注明出处地址:http://blog.windigniter.com/en/2013/12/joomla-encryption-password-authentication/

一下内容都假设 用户输入的密码 为 $password, 数据库中查出来的用户密码为 $row[‘password’]
1.密码长度为65位的中间存在“:”的 一般都是md5的加密,验证方式

list($hash, $salt) = explode(':', $row['password']);
if(md5($password.$salt) == $hash){
//密码正确
}

2.如果密码长60位 前面是“$2y$”类似这种字符开头的话 使用的是 crypt() 的加密方式, 在php5.5以上的版本中, 系统带的 password_hash($password, $salt); 来加密的,这个密码验证只能通过 password_verify() 函数来验证,这个 验证代码为

if(password_verify($password, $row['password'])){
//密码正确
}

在有的版本中我们发现还有一种密码长度为40位 以 类似“$P$D”这种密码开头,
这个密码也是和 上面的 crypt 加密有关系,这个密码如何验证 使用代码未能实现,但可以使用Joomla自带的函数来实现验证。代码如下

$is_pwd_right = JUserHelper::verifyPassword($password, $row['password'], $row['id']);

其中 $row[‘id’] 为用户的ID
如果返回值为真则验证成功,如果返回值为false 或0 验证失败,也就是密码错误。这个方式同样适用于长度为60的那个验证。

目前就本人了解的这几个版本的joomla,1.x, 2.x 3.0,3.1, 3.2 可以整合上面的几个方面做验证。

比如,安装的joomla3.2加密方式就是长度为60的可以使用password_verify()验证的。

joomla 3.0, 和 joomla 3.1, joomla 3.1.5 则是使用的 MD5加密的长度为65的密码

曾在一个客户的网站上发现使用 $match = JUserHelper::verifyPassword($password, $row['password'], $row['id']); 来验证用户密码的,版本就不清楚了。joomla 根据版本的不同存在很多的加密方式。尤其是当站长自己整合的跟用户验证有关的模块后,升级joomla 可能会导致用户密码验证失败,这里总结出几种joomla加密方式来供站长们和开发者们参考,(版权所有转载必须注明出处:http://blog.windigniter.com/2013/12/joomla-encryption-password-authentication/

一下内容都假设 用户输入的密码 为 $password, 数据库中查出来的用户密码为 $row[‘password’]
1.密码长度为65位的中间存在“:”的 一般都是md5的加密,验证方式

list($hash, $salt) = explode(':', $row['password']);
if(md5($password.$salt) == $hash){
//密码正确
}

2.如果密码长60位 前面是“$2y$”类似这种字符开头的话 使用的是 crypt() 的加密方式, 在php5.5以上的版本中, 系统带的 password_hash($password, $salt); 来加密的,这个密码验证只能通过 password_verify() 函数来验证,这个 验证代码为

if(password_verify($password, $row['password'])){
//密码正确
}

在有的版本中我们发现还有一种密码长度为40位 以 类似“$P$D”这种密码开头,
这个密码也是和 上面的 crypt 加密有关系,这个密码如何验证 使用代码未能实现,但可以使用Joomla自带的函数来实现验证。代码如下

$is_pwd_right = JUserHelper::verifyPassword($password, $row['password'], $row['id']);

其中 $row[‘id’] 为用户的ID
如果返回值为真则验证成功,如果返回值为false 或0 验证失败,也就是密码错误。这个方式同样适用于长度为60的那个验证。

目前就本人了解的这几个版本的joomla,1.x, 2.x 3.0,3.1, 3.2 可以整合上面的几个方面做验证。

比如,安装的joomla3.2加密方式就是长度为60的可以使用password_verify()验证的。

joomla 3.0, 和 joomla 3.1, joomla 3.1.5 则是使用的 MD5加密的长度为65的密码

曾在一个客户的网站上发现使用 $match = JUserHelper::verifyPassword($password, $row['password'], $row['id']); 来验证用户密码的,版本就不清楚了。

(3004)

Related Post