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.
}
}
答案 0 :(得分:0)
这里有些错误:
void rsa_encrypt(char* msg,int len,int key,long int *out[])
{
long int pout[100];
...
out[i]=&pout[i]; // <<<<<
...
}
您正在将局部变量的地址存储在out
数组中,但是局部变量在离开函数后将立即超出范围,并且它们不再存在。
因此,基本上out
数组将包含指向不存在的变量的指针,访问它们将导致未定义的行为。
可能还有其他问题。