gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 30 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章在Linux中使用MD5实现用户验证的解决方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

使用openssl中的MD5函数,该函数返回16字节的unsigned char类型的数据,每个字节的范围都在0~255间,把 。

它格式化为十六进制就是32位md5编码。注:一个字节为8位,正好可以表示2位的十六进制.

使用登录客户端的用户名从Redis数据库中得到salt值和加密后的密码,然后把登录客户端的密码经过salt加密后,与 。

Redis数据库中的密码进行比较。相同则验证通过,否则验证失败.

Redis数据库中密码的存储格式为password:salt 。

用户验证算法如下:

  int user_authenticate(char *username, char *password) 。

  { 。

    char *salt_pw, *salt, *pw,

    char buf[40],

    char tmp[3]={'\0'}, md5_str[33]={'\0'},

    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, "%02x", 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位十六进制数的过程.

最后此篇关于在Linux中使用MD5实现用户验证的解决方法的文章就讲到这里了,如果你想了解更多关于在Linux中使用MD5实现用户验证的解决方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com