Salve,
sono nuovo nel portale e stavo provando a fare Crittografia Rsa. Uso il C++. Sono arrivato alla risoluzione di tutti i case escluso l’ultimo nel quale ottengo solo il 2 e il 3 test approvato, i restanti sbagliati perche’ oltre il quanto di tempo massimo (1 s). Di seguito il codice della funzione.
#include <map>
void decifra(int N, int d, int L, int* messaggio, char* plaintext)
{
std::map <int, long long int> mapCache;
unsigned long long int A, B, power_a, result;
bool isOdd;
isOdd = d % 2 == 1 ? true : false;
power_a = d >> 1;
//itering through cripto numbers in array
for(unsigned long long int index=0; index<L; index++){
if(mapCache.find(messaggio[index]) == mapCache.end()){
A = 1;
B = 1;
//(A · B) mod M = (A mod M · B mod M) mod M
for(unsigned long long int num_potenza = 0; num_potenza < power_a; num_potenza++){
A = A % N * messaggio[index] % N;
}
//power of b
if(isOdd){
B = A % N * messaggio[index] % N;
} else {
B = A;
}
result = A % N * B % N;
mapCache[messaggio[index]] = result;
} else {
result = mapCache[messaggio[index]];
}
//decrypted char assignment
plaintext[index] = result;
}
plaintext[L] = '\0';
}
Ho aggiunto map in seguito perche’ mi e’ stata utile in esercizi precedenti, anche se con risultati nulli. Qualche consiglio? Cosa non ho preso in considerazione? Grazie in anticipo a chi dedichera’ tempo a rispondermi