LDAP中的用户密码MD5算法

好几个项目中要用到OPENLDAP,而OPENLDAP支持一个用户密码的加密算法MD5。我就是一直非常郁闷,文档说支持MD5,为什么不能直接将PHP脚本MD5生成的密码直接割接过去呢?仔细捣腾了一下,发现原来是这样的。
MD5这个函数后边有个参数:

string
md5 ( string str [, bool raw_output])

Calculates the MD5 hash of str using the RSA Data Security, Inc. MD5 Message-Digest Algorithm, and returns that hash. The hash is a 32-character hexadecimal number. If the optionalraw_output is set toTRUE, then the md5 digest is instead returned in raw binary format with a length of 16. 

通常情况下,我们生成的密码是32个字符的16进制字符。LDAP的MD5密码用PHP应该怎么生成呢?必须用下面的算法:

$ldap_passwd = "{md5}".base64_encode(pack("H*",md5($password)));

 

或者相当于

 

base64_encode(md5($password,true));

 

因此,如果要把数据倒过去,很简单,设定用户的密码的时候用这个算法就可以了。

 

$ldap_passwd = "{md5}".base64_encode(pack("H*",”我们已经MD5过后的密码”)));

仔细对比如下脚本的运行情况:

   $passwd = "haka";

   $str_md5 = md5($passwd,true);

   1. echo $str_md5;

   echo "<br>+---<br>";

   2. print_r($str_md5);

   echo "<br>+---<br>";

   $str_md5_default = md5($passwd);

  3. echo $str_md5_default;

   echo "<br>+---<br>";

   $str_pack = pack("H*",$str_md5_default);

   4. print_r($str_pack);

   echo "<br>+---<br>";

   $str_base64 = base64_encode ($str_md5);

   echo "<br>+---<br>";

   5. echo $str_base64;

   echo "<br>+---<br>";

   6. echo base64_decode("e01ENX1xVkZjVVM0a1B4Tk1pdzFIRUVBWG13PT0=");

运行结果:
©Q/Q.$?L‹ G@›
+---
©Q/Q.$?L‹ G@›
+---
a9515c512e243f134c8b0d471040179b
+---
©Q/Q.$?L‹ G@›
+---
+---
qVFcUS4kPxNMiw1HEEAXmw==
+---
{MD5}qVFcUS4kPxNMiw1HEEAXmw==
+---
{MD5}g+Spau2WQ2xiG5gJ4lizCQ==

算法:将密码经过 MD5 运算,得到 32 字节的字符串,然后每2个字节压缩成一个十六进制字符,这样得到16字节的字符串,最后经过Base64编码。

MD5 和base64的java实现普天盖地的,要做的就是每2个btye encode一次。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值