MySQL MD5哈希到base64

MySQL MD5哈希到base64,mysql,sql,base64,md5,Mysql,Sql,Base64,Md5,我有一个mysql数据库,它存储了我所有的用户信息用户名、密码等。我正在用back sql构建一个LDAP服务器,除了密码字段外,其他一切都正常。所有密码都是基本的MD5哈希,因此 选择MD5'testPass01' 返回 428a65ed9de7dbf8ef7d08f884528440 显然,这是二进制值的十六进制对表示。LDAP将理解base64编码的字符串,类似于 {MD5}Qopl7Z3n2/jvfQj4hFKEQA== 我找到了一个执行转换的perl脚本 #!/usr/bin/perl

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

选择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 server 5.6


谢谢,它工作得很好。在类似这样的注释中使用函数将生成LDAP将接受的base64密码


选择BASE64_ENCODEunhex'mysql-md5-encoded-password'

上一篇文章包含一个BASE64_ENCODE函数——我正在使用它,但据我所知,在我在文章中的perl脚本的第7行,我需要将每个字符的十六进制值和位移4,然后使用旁边字符的十六进制值。然后将其转换为字符。完成后,我就可以使用BASE64_ENCODEok了,我发现如果使用select BASE64_ENCODEunhexmd5'foobar',使用引用的函数就可以了。但是这个函数有一个问题。如果你的密码有一定的字母组合,结果是一个字母关闭…我很高兴你得到它的工作。您是否找到了导致丢失字符的错误的原因?是的,由于某种原因,存储函数中声明first_char BLOB1的行;我把它当作第一个字符;