R语言生成LDAP服务LDIF文件所需SHA加密密码的问题排查
错误原因
你当前代码的问题在于digest函数默认返回SHA1哈希的十六进制文本形式,而OpenLDAP的{SHA}格式要求后缀拼接的是SHA1原始二进制字节的Base64编码,你将十六进制文本直接拼接前缀后再编码,自然和预期结果不一致。
正确实现代码
library(base64enc) library(digest) # 1. 计算明文password的SHA1原始二进制哈希,不要转十六进制 sha1_raw <- digest("password", algo = "sha1", serialize = FALSE, raw = TRUE) # 2. 对原始哈希做base64编码,拼接{SHA}前缀 ldap_pwd_plain <- paste0("{SHA}", base64encode(sha1_raw)) # 3. 对拼接完成的字符串做base64编码,得到LDIF文件中的userPassword字段值 ldif_pwd <- base64encode(charToRaw(ldap_pwd_plain)) # 输出验证 ldap_pwd_plain # 预期输出: "{SHA}W6ph5Mm5Pz8GgiULbPgzG37mj9g=" ldif_pwd # 预期输出: "e1NIQX1XNnBoNU1tNVB6OEdnaVVMYlBnekczN21qOWc9="
结果验证
生成的ldif_pwd和你给出的LDIF密码字段值完全匹配,符合OpenLDAP的密码编码规则。
内容的提问来源于stack exchange,提问作者Seb
相关产品推荐
相关产品推荐

