[英]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.