簡體   English   中英

C中的crypt函數中的數據丟失

[英]loss of data in crypt function in C

基於crypt.c的示例,我有以下代碼,但是當我運行它時,密碼1在第二次調用crypt時被損壞。 誰能發現問題?

在兩個請求中輸入相同的密碼,最后三個字符串的值應相同。

===============================================

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <crypt.h>
#define _XOPEN_SOURCE
#include <unistd.h>

/*
cc calc1.c -ocalc1 -lcrypt
*/

int main(void) {
    unsigned long seed[2];
    char salt[] = "$1$zhodFRlE$";
    char *password2,*password1,*temp1;
    int i,ok;
    printf("%s is Salt\n",salt);

    password1 = crypt(getpass("Password1 :"), salt);

    printf("Crypt Password1: %s\n",password1);
    temp1 = strdup(password1);
    printf("Crypt temp1: %s\n",temp1);

    password2 = crypt(getpass("Password2 :"),temp1);

    printf("Crypt Password1: %s\n",password1);
    printf("Crypt temp1: %s\n",temp1);
    printf("Crypt Password2: %s\n",password2);
    return 0;
}

================================================== ==============

您的問題是該功能:

char *crypt(const char *key, const char *salt);

返回一個臨時指針,下次您調用該函數時,該指針將被覆蓋。 為了不覆蓋先前返回的數據,您想做什么:

char *crypt_r(const char *key, const char *salt,
                 struct crypt_data *data);

代替; 這使您可以傳入一個包含緩沖區的結構,以保留加密的密碼。 有關更多信息,請參見手冊頁。

這樣可以解決您消失的密碼1。

另外,這不是正確的:“對兩個請求輸入相同的密碼,最后三個字符串的值都應相同。” 通過使用不同的鹽,您將獲得不同的加密值。

您將不同的鹽值傳遞給對crypt()的第二次調用-即使密碼相同,這也會導致返回值不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM