前几天因为工作的关系,需要使用PHP模拟LDAP中的SHA,SSHA,MD5的加密方法,本来以为直接使用sh1(),md5()这样的方法就可以实现,可是这样写完了以后发现生成的加密字符串,在LDAP中解密是错误的,后来查了查资料才发现,LDAP中SHA,SSHA,MD5加密方法是经过了特殊处理的,具体如下:
SHA加密方法:
/**
* SHA加密
* @param $password 需要加密的字符串
* @return 返回加密号的字符串
* */
public function ldap_sha($password)
{
$ldap_passwd = “{SHA}”.base64_encode(pack(“H*”, sha1($password)));
return $ldap_passwd;
}
SSHA加密方法:
/**
* SSHA加密算法
* @param $password 需要加密的字符串
* @return 返回加密号的字符串
* */
public function ldap_ssha($password)
{
$salt = “”;
for ($i=1; $i<=10; $i++)
{
$salt .= substr(‘0123456789abcdef’,rand(0,15),1);
}
$hash = “{SSHA}” . base64_encode(pack(“H*”,sha1($password.$salt)).$salt);
return $hash;
}
MD5加密方法:
/**
* MD5加密
* @param $password 需要加密的字符串
* @return 返回加密号的字符串
* */
public function ldap_md5($password)
{
$md5 = “{MD5}”.base64_encode(pack( ‘H*’,md5($password)));
return $md5;
}