源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

在Linux中使用MD5实现用户验证的解决方法

  • 时间:2022-12-03 08:01 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:在Linux中使用MD5实现用户验证的解决方法
使用openssl中的MD5函数,该函数返回16字节的unsigned char类型的数据,每个字节的范围都在0~255间,把 它格式化为十六进制就是32位md5编码。注:一个字节为8位,正好可以表示2位的十六进制。 使用登录客户端的用户名从Redis数据库中得到salt值和加密后的密码,然后把登录客户端的密码经过salt加密后,与 Redis数据库中的密码进行比较。相同则验证通过,否则验证失败。 Redis数据库中密码的存储格式为password:salt [b]用户验证算法如下:[/b]   int user_authenticate(char *username, char *password)   {     char *salt_pw, *salt, *pw;     char buf[40];     char tmp[3]={''}, md5_str[33]={''};     unsigned char md[16];     int i;     //get_salt_pw调用Redis数据库获得password:salt     salt_pw = get_salt_pw(db, username);     pw = strtok(salt_pw, ":");     if(!pw){       return 0;     }     salt = strtok(NULL, ":");     if(!salt){       return 0;     }     strcpy(buf, password);     strcat(buf, salt);     MD5((const unsigned char*)buf, strlen(buf), md);     //transform to md5 string     for(i = 0; i < 16; i++){       sprintf(tmp, "x", md[i]);       strcat(md5_str, tmp);     }     //compare encode password using md5     if(strcmp((char*)md5_str, pw)){       return 0;     }     return 1;   } 其中要注意strtok函数的使用,以及16字节的unsigned char转换为32位十六进制数的过程。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部