extmail 密码加密方式修改为plain-md5的方法

extmail默认密码加密方式是md5crypt,但是有些时候会遇到这样的问题——老的邮件系统中的用户密码是md5加密的。

此时需要将extmail的密码加密方式修改为md5,通过官方解释(md5和md5crypt没有区别),修改为plain-md5即可。但是,这只解决了web登陆的验证问题,没有解决smtp以及pop3的验证问题。

通过 http://www.extmail.org/forum/viewthread.php?tid=3175 帖子解决了验证问题,内容摘录如下:

courier-authlib的auth_generic手册里提到crypted密码的格式支持3类:

1)传统的crypted 的密码,如crypt()或md5-salted的密码
2){MD5}为前缀,后面是base64编码后的md5密码
3){SHA}为前缀(实际还支持{SAH256},这个看source知道)后面是base64编码的sha密码

如何能实现2呢?在目前的extmail/extman实现里,md5密码只支持以16进制形式存在的密码,例如:

d41d8cd98f00b204e9800998ecf8427e

经过base64编码后依然无法通过authlib的认证,后来仔细看Digest::MD5手册里的介绍,发现md5函数返回的是二进制的、产度为16个字节的密文,而md5_hex(也就是目前extmail/extman使用的)是其16进制的形式(长度32个字节)。

于是测试用md5函数产生md5密文并用base64编码后,加上{MD5}前缀,塞到mysql里,发现通过了authtest的测试!再查看了一下courier-authlib的checkpasswd.c及checkpasswdmd5.c和md5目录下的md5加密函数,证实了就是校验二进制+base64编码后的md5密文,而不是hex后的密文。

问题是如何从hex格式的密文转成binary格式?很多用户从其他系统转到ext*下时,密码大多是md5 hex格式的,于是编写如下代码实现转换:

use MIME::Base64;

my $s = ‘d41d8cd98f00b204e9800998ecf8427e‘;

$s =~ s/(..)/bin($1)/ge;
$s = ‘{MD5}‘.encode_base64($s);
$s =~ s/\s+//; # remove newline

print $s, "\n";

sub bin {
      my $n = shift;
      sprintf("%c", hex($n));
}

这样常规的md5密文就被转成符合要求的{MD5}XXXXX格式了。刚才这个脚本的执行结果:

{MD5}1B2M2Y8AsgTpgAmY7PhCfg==

时间: 2024-12-04 12:45:53

extmail 密码加密方式修改为plain-md5的方法的相关文章

laravel更改默认的登录密码加密方式

laravel 默认用的登录密码加密方式是: $password = Hash::make('password'); 而我平时用的密码加密方式是: $password = md5('password'.'salt'); //其中的salt是一个随机串 那么怎么把默认的改成自己想要的呢? 我谷歌了一下,还真让我找到了.转送:http://blueve.me/archives/898 为了防止这个网站打不开,我自己再稍微整理了一下,以备后用: 首先,打开这个文件夹:/vender/laravel/f

mysql8修改密码加密方式

mysql8用navicat可视化连接会报错加密方式错误,想要连接mysql8有两种方式 1:安装MySQL8客户端 2:修改MySQL8的密码加密方式 我采用的是第二种,因为服务器上是MySQL8,而我本地是MySQL5,不想在装一个MySQL8,要是换电脑还要在装一个MySQL8,觉得有点麻烦. 以下是通过查资料总结出来的修改方法以及修改过程中可能会出现的问题.时间有点久了,查到的资料地址忘记了,就剩了个修改记录. // 登陆 mysql -uroot -p // 更改加密方式 mysql>

discuz密码加密方式

discuz密码加密的方式,记录在此. discuz注册时,会把密码按一个规则加密.比如我的密码是123456echo md5("123456"); 会输出:e10adc3949ba59abbe56e057f20f883e 而数据库的值却为:7839dc9437013b5c11a5d86e9b8350e9 注意到:有个叫salt的字段,其值为:d82a35其实这是一个随机的字符串.第一次md5后的值再加上盐值(salt)再进行md5,就是要得到的值了.测试:www.jbxue.come

ECShop V2.7.3管理员密码加密方式

忘了本地的ECShop的用户密码,就看了下.ECShop V2.7.3密码的加密方式是这样的: if(!empty($ec_salt))      {           /* 检查密码是否正确 */           $sql = "SELECT user_id, user_name, password, last_login, action_list, last_login,suppliers_id,ec_salt".              " FROM "

Ecstore会员密码加密方式破解

<?php //以下是加密方式,亲测有效 $string_md5 = md5(md5("密码")."用户名"."注册时间");//三个参数组合:密码先MD5加密+用户名+注册时间 $front_string = substr($string_md5,0,31);//截取了一位 $end_string = 's'.$front_string; print_r($end_string);

mysql8.0新增用户及密码加密规则修改

MySQL8.0已经发布GA版,当前最新GA版本为8.0.12.虽然相对于之前版本,MySQL8.0没有加入新元素,但是,经过代码重构,MySQL8.0的优化器更加强大,同时也有一些新特性,如支持索引隐藏等. 但是,MySQL新版本中也有很多与先前版本不一样的地方,比如在用户创建上就有很多变化. 1. 用户创建 创建用户的操作已经不支持grant的同时创建用户的方式,需先创建用户再进行授权 mysql> grant all on *.* to 'admin'@'%' identified by

Mysql密码加密方式

以Mysql 4.1版本为分界线,两种加密方式 Mysql323加密:(16位) select  old_password('root'); //Mysql自带加密函数old_password(str) mysql> select old_password('root'); +----------------------+ | old_password('root') | +----------------------+ | 67457e226a1a15bd | +---------------

Cognos权限认证CJP方式之用户密码加密

在项目开发过程中,用户往往对系统的安全都有明确的要求,下面针对cognos门户认证用户密码如何加密来提供一个简单的wf 1Cognos权限认证方式:CJP 2Cognos用户数据库类型:Oracle 3用户密码加密方式:MD5 本文主要说一下大概的实现过程: a:加密方式采用md5,可以用Java代码来写方法实现,也可以在数据库中写方法,本例子采用在DB服务端写function的方法来处理md5加密问题 (1):为了方便大家,附上md5加密方法源码 CREATE OR REPLACE FUNCT

iOS 中的加密方式

1 加密方式主要有: Base64,MD5,RSA,DES,AES,钥匙串存储,Cookie 2 各加密方式的比较 2.1 Base64 2.1.1 基本原理:采用64个基本的 ASCII 值对数据进行重新编码. 2.1.2 实现步骤 > 将需要编码的数据拆分成字节数组 > 以3个字节为一组 > 按顺序排列24位数据,再将这24位数据均分为4组. > 再在每组的最高位前补2个0,称为一个字节. > 在最后一个字节不足的时候末尾填0 > 在最后编码完成的时候末尾添加1到2