在Linux中使用MD5实现用户验证的解决方法
使用openssl中的MD5函数,该函数返回16字节的unsignedchar类型的数据,每个字节的范围都在0~255间,把
它格式化为十六进制就是32位md5编码。注:一个字节为8位,正好可以表示2位的十六进制。
使用登录客户端的用户名从Redis数据库中得到salt值和加密后的密码,然后把登录客户端的密码经过salt加密后,与
Redis数据库中的密码进行比较。相同则验证通过,否则验证失败。
Redis数据库中密码的存储格式为password:salt
用户验证算法如下:
intuser_authenticate(char*username,char*password)
{
char*salt_pw,*salt,*pw;
charbuf[40];
chartmp[3]={"\0"},md5_str[33]={"\0"};
unsignedcharmd[16];
inti;
//get_salt_pw调用Redis数据库获得password:salt
salt_pw=get_salt_pw(db,username);
pw=strtok(salt_pw,":");
if(!pw){
return0;
}
salt=strtok(NULL,":");
if(!salt){
return0;
}
strcpy(buf,password);
strcat(buf,salt);
MD5((constunsignedchar*)buf,strlen(buf),md);
//transformtomd5string
for(i=0;i<16;i++){
sprintf(tmp,"%02x",md[i]);
strcat(md5_str,tmp);
}
//compareencodepasswordusingmd5
if(strcmp((char*)md5_str,pw)){
return0;
}
return1;
}
其中要注意strtok函数的使用,以及16字节的unsignedchar转换为32位十六进制数的过程。
相关文章
- Linux系统接收广播数据的方法(linux接收广播包)
- Linux编译库:可实现梦想的利器(linux编译库)
- Linux 后台运行:实现无缝自动化(linux后台运行)
- Linux获取本地IP地址方法简介(linux获取本地ip地址)
- Linux系统资源监控:实现高效率运行(linux系统资源监控)
- Linux 下简单取文件后缀名的方法(linux取文件后缀名)
- Linux下快捷下载软件的方法(linux下如何下载软件)
- Linux查看登录记录:一分钟快速搞定(linux查看登陆记录)
- Linux解压乱码文件的解决方法(linux解压文件乱码)
- Linux动态库变量的力量:实现无限可能性(linux动态库变量)
- Linux发展史:从单一分支到多元分支(linux的分支)
- 查看Linux系统可用容量的方法(查看linux容量)
- Linux时间同步:实现完美节拍(linux时间同步)
- Linux分支:探索开源世界的不同维度(linux的分支)
- 掌握Linux目录执行权限的重要性与方法(linux目录执行权限)
- Linux 分辨率配置,让屏幕显示更清晰(linux配置分辨率)
- Linux用户权限管理指南:控制访问机制实现安全授权(linux下给用户权限)
- 使用SecureCRT实现Linux文件上传全攻略(securecrt上传文件到linux)
- Linux重启MySQL:实现步骤指南(linux重启mysql)
- Linux权威操作技巧:如何更改所有者的方法详解(更改所有者linux)
- Linux渲染:实现艺术绽放的软件之旅(linux渲染软件)
- Linux系统无法进入:排查解决之路(linux进不去系统)
- Linux下查看网络负载的简易方法(linux 查看网络负载)
- Linux远程连接:轻松实现跨操作系统访问(linux远程连接)
- Linux系统中创建表空间的技巧(linux创建表空间)