将指针数组作为参数传递并检索值

时间:2018-09-26 11:37:11

标签: c arrays pointers multidimensional-array

void rsa_encrypt(char* msg,int len,int key,long int *out[]) 
{ 
long int pout[100];
long int pt,k;
int i=0,j;  
while(i!=len) 
{ 
    pt=msg[i]; //original message
    pt=pt-96; 
    k=1; 
    for(j=0;j<key;j++) 
    { 
        k=k*pt; 
        k=k%multiplier; 
    } 
    pout[i]=k;
    out[i]=&pout[i];
     //Public key
    i++; 
}
}

void rsa_decrypt(long msg[], int len, int key, char *out) 
{ 
long int pt,ct,k; 
int i=0, j; 
while(i<len) 
{ 
    ct=*(msg[i]); 
    k=1; 
    for(j=0;j<key;j++) 
    { 
        k=k*ct; 
        k=k%multiplier; 
    } 
    pt=k+96;
    out[i]=(char)pt; //decrypted data
    i++; 
}
//out[i] = 0;
}

我需要在out[]函数的rsa_encrypt参数中存储值的地址。

rsa_decrypt函数需要从rsa_encrypt函数访问out[]中存储的地址的值。

我的程序正确吗?我在这里想念东西吗?

在这里,rsa_encrypt和rsa_decrypt在不同的函数中被调用。

static void saodv_encrypt_packet(PSAODV_CTRL_PACKET ctrl)
{
int ek;
int dk;
//fnNetSimError("Implement this function %s\n",__FUNCTION__);
switch(ctrl->ctrlPacketType)
{
    case AODVctrlPacket_RREQ:
        get_rreq_str_data(ctrl);
        break;
    case AODVctrlPacket_RREP:
        get_rrep_str_data(ctrl);
        break;
    case AODVctrlPacket_RERR:
        get_rerr_str_data(ctrl);
        break;
    default:
        break;
}
rsa_getkey(ctrl->tx,
    ctrl->rx,
    &ek,&dk);
//Call RSA to encrypt
rsa_encrypt(ctrl->orgData,ctrl->len,ek,ctrl->publickey);
return;
}

static bool saodv_decrypt_packet(PSAODV_CTRL_PACKET ctrl)
{
//fnNetSimError("Implement this function %s\n", __FUNCTION__);
int dk, ek;
rsa_getkey(ctrl->tx,
    ctrl->rx,
    &ek,&dk);
//Call RSA to decrypt
rsa_decrypt(ctrl->publickey,ctrl->len,dk, ctrl->DecryptedData);

write_log(ctrl);

if(!memcmp(ctrl->orgData,ctrl->DecryptedData,ctrl->len) && ctrl->len != 0)
{
    return true;
}
else
{
    return false; //Decryption fail.
}
}

1 个答案:

答案 0 :(得分:0)

这里有些错误:

void rsa_encrypt(char* msg,int len,int key,long int *out[]) 
{ 
   long int pout[100];
   ...
   out[i]=&pout[i];  // <<<<<
   ...
}

您正在将局部变量的地址存储在out数组中,但是局部变量在离开函数后将立即超出范围,并且它们不再存在。

因此,基本上out数组将包含指向不存在的变量的指针,访问它们将导致未定义的行为。

可能还有其他问题。