php ldap 设置密码,让 LDAP 使用 MD5 加密的密码小结

OpenLDAP 支持 CRYPT, MD5, SSHA 和 SHA 四种加密算法保存密码,默认使用 SSHA。

OpenLDAP 中的 MD5 不是一般的 MD5 算法,不能用普通的 MD5 函数来生成,好像经过 Base64 转换之类的,没有深究,不是很清楚,有谁知道的希望分享一下。

===================================================================

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

以下 3 种办法可以生成 MD5 散列字符串:

1.使用 OpenLDAP 自带命令

# slappasswd -h {md5} -s "secret"

{MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ==2. 使用 Perl 程序

#!/usr/bin/perl -w

use Digest::MD5 (md5_base64);

my $passwd = "secret";

my $md5hash = (md5_base64 "$passwd") . "==";

print "$md5hash\n";

##====================================================

## another way

use Digest::MD5 qw(md5_hex);

use MIME::Base64;

my $md5hash = encode_base64(pack('H*',md5_hex $passwd));

print "$md5hash\n";

##====================================================

## 据 hzqbbc 兄的意思,将md5后的字符串每2位(字符)作为一个块,转换成十六进制字符,然后再串接起来 base64 编码,结果是一样的(土了点,但是便于理解)

my $hex_md5;

my @octs = split(//,md5_hex $passwd);

for (my $i=0;$i<16;$i++) {

my $double_byte = $octs[2*$i] . $octs[2*$i+1];

$hex_md5 .= pack('H*',$double_byte);

}

# $hex_md5 的值和 pack('H*',md5_hex $passwd) 是一样的

print encode_base64($hex_md5) . "\n";3. 使用 PHP 程序

可以看到生成的 MD5 字符串长度为 24 位,最后 2 位为 ==。

然后还需修改 OpenLDAP 配置文件 slapd.conf,更改默认密码存放方式:

password-hash {MD5}在导入或改变用户信息时,将上述密码赋给 userPassword 属性即可改变用户的密码,如下:

## file data.ldif

dn: uid=muddyboot,ou=users,dc=test,dc=com

objectClass: posixAccount

uid: muddyboot

cn: muddyboot

homeDirectory: /home/muddyboot

uidNumber: 21

gidNumber: 21

loginShell: /bin/bash

userPassword: {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ==

添加用户信息:

# ldapadd -x -D "cn=root,dc=test,dc=com" -w secret -f data.ldif

adding new entry "uid=muddyboot,ou=users,dc=test,dc=com"

修改用户信息:

# ldapmodify -x -D "cn=root,dc=test,dc=com" -w secret -f data.ldif

modifying entry "uid=muddyboot,ou=users,dc=test,dc=com"以上仅提供生成密码的方法,代码比较简单,就不多说了,希望对大家有所帮助!^_^

阅读(8897) | 评论(0) | 转发(0) |

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值