国产探花免费观看_亚洲丰满少妇自慰呻吟_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位十六進制數的過程。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 兴隆县| 沙坪坝区| 利川市| 疏勒县| 彩票| 茌平县| 农安县| 吉木乃县| 阿拉善右旗| 准格尔旗| 遂川县| 芦山县| 布尔津县| 敦煌市| 兴安盟| 锡林浩特市| 建阳市| 肃宁县| 贵德县| 天峨县| 永善县| 新宁县| 承德市| 黑河市| 延川县| 河曲县| 定州市| 濮阳市| 绿春县| 杭锦旗| 平阳县| 肇源县| 红原县| 会昌县| 黄浦区| 万荣县| 四子王旗| 巩义市| 蒙自县| 临猗县| 乐陵市|