1

AESアルゴリズムを使用したい。

私はその上でこの機能を使用します

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 

しかし、私はエラーが発生します

c で変数 'hexStr' の周りのスタックが壊れていた

4

2 に答える 2

2

temp1文字分のスペースがあります:

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

つまり、これはバッファの終わりをオーバーランし、破損の原因と考えられます:

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

これは C++ であるため、std::string代わりに を使用しchar*ます。

于 2012-07-17T08:03:59.083 に答える
2

null で終了するのを忘れていましたhexStr

だからあなたがするときstrcpy(SArr[r][c],hexStr);。に到達するまでSArr[r][c]fromにコピーしようとしますが、これはどこにでもある可能性があります。hexStr'\0'

于 2012-07-17T08:02:41.323 に答える