前幾天因為工作的關係,需要使用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;
}
參考:http://www.xiaolangspace.com/archives/22