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
должна получить доступ к значениям адресов, хранящихся в out[]
из функции rsa_encrypt.
Правильна ли моя программа?Я что-то здесь упускаю?
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.
}
}