【问题标题】:MySQL MD5 hash to base64MySQL MD5 哈希到 base64
【发布时间】:2013-08-09 08:57:33
【问题描述】:

我有一个存储我所有用户信息(用户名、密码等)的 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

谢谢

【问题讨论】:

  • 上一篇文章包含一个 BASE64_ENCODE 函数 - stackoverflow.com/questions/358500/base64-encode-in-mysql
  • 我正在使用它,但据我了解,在我在帖子中的 perl 脚本的第 7 行,我需要获取每个字符的十六进制值并按 4 移位,然后将其与它旁边的字符的十六进制值。然后将其转换为 CHAR。一旦完成,我就可以使用 BASE64_ENCODE
  • 好的,我发现如果您使用select BASE64_ENCODE(unhex(md5('foobar')),则使用引用的函数。但是这个功能有问题。如果您的密码有特定的字母组合,则结果是少一个字母...

标签: mysql sql base64 md5


【解决方案1】:

完美运行。像这样使用 cmets 中的函数将生成 LDAP 将接受的 base64 密码。

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

【讨论】:

  • 我很高兴你让它工作了。您是否弄清楚是什么导致了您在丢失字符时遇到的错误?
  • 是的,由于某种原因,具有DECLARE first_char BLOB(1); 的存储函数行我将其作为DECLARE first_char CHAR(1);
猜你喜欢
  • 1970-01-01
  • 2020-02-14
  • 2012-08-17
  • 1970-01-01
  • 2018-05-18
  • 2020-12-08
  • 2020-03-09
  • 1970-01-01
相关资源
最近更新 更多