2012-07-17 88 views
1

我想使用AES算法。錯誤:圍繞變量'hexStr'堆棧在C++中損壞

我用這個函數就可以了

void SubBytes(char *SArr[4][4]){ 
int r,c; 
char xlook[2];char ylook[2]; char hexStr[2]; char *Pad; 
int intxlook,intylook; 
char *temp; 
int subbyte; 
Pad = (char *)malloc (sizeof(char)); 
temp = (char *)malloc (sizeof(char)); 

for (r = 0; r < 4; r++) 
    for(c = 0; c < 4; c++){ 
     strcpy(temp,""); 
     strcpy(xlook,"");strcpy(ylook,""); 
     strcpy(temp,SArr[r][c]); 
     xlook[0] = temp[0]; xlook[1] = '\0'; 
     ylook[0] = temp[1];ylook[1] = '\0'; 
     intxlook = string_to_dec(xlook); 
     intylook = string_to_dec(ylook); 

    subbyte = SBox(intxlook,intylook); 
    itoa(subbyte,hexStr,16); 

    if (strlen(hexStr) < 2){ 
     strcpy(Pad,""); 
     Pad = Padding(0,1); 
     strcat(Pad,hexStr); 
     strcpy(SArr[r][c],Pad); 
    } 
    else 
     strcpy(SArr[r][c],hexStr); 

    } 

    //free(temp); free(Pad); 
}  //end 

,但我得到周圍的變量 'hexStr' 錯誤

堆棧在C

回答

2

你忘了空字符結束hexStr已損壞。

所以,當你做strcpy(SArr[r][c],hexStr);。它會嘗試從hexStr複製到SArr[r][c],直到達到'\0',這可能在任何地方。

+0

謝謝,這是怎麼回事? – 2012-07-17 08:04:24

+0

@ ar.gorgin將大小增加1,並將最後一個字符設置爲「'\ 0''。 – 2012-07-17 08:13:01

2

temp具有用於單個字符足夠的空間:

temp = (char *)malloc (sizeof(char)); 

含義,這將溢出緩衝區的端部和用於腐敗可能的原因:

strcpy(temp,SArr[r][c]); 

由於這是C++,使用std::string而不是char*