最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在Linux中使用MD5實(shí)現(xiàn)用戶驗(yàn)證的解決方法

 更新時(shí)間:2013年04月19日 09:30:56   作者:  
本篇文章小編為大家介紹,在Linux中使用MD5實(shí)現(xiàn)用戶驗(yàn)證的解決方法。需要的朋友參考下

使用openssl中的MD5函數(shù),該函數(shù)返回16字節(jié)的unsigned char類型的數(shù)據(jù),每個(gè)字節(jié)的范圍都在0~255間,把

它格式化為十六進(jìn)制就是32位md5編碼。注:一個(gè)字節(jié)為8位,正好可以表示2位的十六進(jìn)制。

使用登錄客戶端的用戶名從Redis數(shù)據(jù)庫中得到salt值和加密后的密碼,然后把登錄客戶端的密碼經(jīng)過salt加密后,與

Redis數(shù)據(jù)庫中的密碼進(jìn)行比較。相同則驗(yàn)證通過,否則驗(yàn)證失敗。

Redis數(shù)據(jù)庫中密碼的存儲(chǔ)格式為password:salt

用戶驗(yàn)證算法如下:

  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調(diào)用Redis數(shù)據(jù)庫獲得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函數(shù)的使用,以及16字節(jié)的unsigned char轉(zhuǎn)換為32位十六進(jìn)制數(shù)的過程。

相關(guān)文章

最新評論

石柱| 河西区| 溧阳市| 舟山市| 广平县| 安新县| 衢州市| 普兰县| 措美县| 陈巴尔虎旗| 宝鸡市| 福安市| 汝南县| 黄梅县| 新宁县| 镇远县| 固原市| 克拉玛依市| 云南省| 乌拉特中旗| 大安市| 嘉鱼县| 日照市| 乌鲁木齐县| 松江区| 武功县| 青铜峡市| 洛隆县| 邵武市| 吉林省| 祁门县| 吉木乃县| 蕉岭县| 临颍县| 神木县| 鄂托克旗| 安平县| 彩票| 九台市| 惠东县| 中西区|