国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務器 > Linux服務器 > 正文

在Linux中使用MD5實現用戶驗證的解決方法

2024-09-05 23:02:03
字體:
來源:轉載
供稿:網友

使用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位十六進制數的過程。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临沧市| 正定县| 苍梧县| 新蔡县| 方正县| 微博| 雷州市| 兴隆县| 长海县| 马龙县| 永清县| 苏州市| 蓝山县| 建昌县| 辽源市| 文水县| 洛南县| 揭阳市| 正镶白旗| 玉屏| 安康市| 梓潼县| 泽库县| 平遥县| 夏邑县| 道真| 绥德县| 灵台县| 峨边| 永城市| 广丰县| 荔浦县| 南川市| 新郑市| 哈尔滨市| 敖汉旗| 微山县| 武鸣县| 苍山县| 汕头市| 京山县|