zl程序教程

您现在的位置是:首页 >  系统

当前栏目

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

Linux方法 实现 使用 解决 用户 验证 MD5
2023-06-13 09:14:50 时间

使用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位十六进制数的过程。