2

我有一个存储我所有用户信息(用户名、密码等)的 mysql 数据库。我正在构建一个带有 back-sql 的 LDAP 服务器,除了密码字段外,一切正常。所有密码都是基本的 MD5 哈希,所以

select MD5('testPass01')

返回

428a65ed9de7dbf8ef7d08f884528440

显然这是二进制值的十六进制表示。LDAP 将理解一个 base64 编码的字符串,它是这样的

{MD5}Qopl7Z3n2/jvfQj4hFKEQA==

我找到了一个执行转换的 perl 脚本

#!/usr/bin/perl
use MIME::Base64;
use strict;
my @md5 = split "",$ARGV[0];
my @res;
for (my $i = 0 ; $i < 32 ; $i+=2)
{
my $c = (((hex $md5[$i]) << 4) % 255) | (hex $md5[$i+1]);
$res[$i/2] = chr $c;
print $c;
}
print "{MD5}".encode_base64(join "", @res);
#-------------------------------------------#

我的问题是:是否可以通过存储过程使用 SQL 进行转换?我无法安装包含 base64 编码和解码功能的 MySQL 服务器 5.6

谢谢

4

1 回答 1

2

它完美地工作。像这样使用注释中的函数将生成 LDAP 将接受的 base64 密码。

select BASE64_ENCODE(unhex('mysql-md5-encoded-password')

于 2013-08-07T23:50:08.927 回答