Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - problema col cifrario di cesare
Forum - C# / VB.NET - problema col cifrario di cesare

Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 18:11
Mercoledì, 14/05/2014
Ho un problemino:
voglio fare la codifica e la decodifica di un messaggio usando il cifrario di cesare.
Sono riuscito a fare la codifica facendo così:

Codice sorgente - presumibilmente Plain Text

  1. cypherText[i] = alfabeto[(alfabeto.IndexOf(cypherText[i]) + 1) % 26];



Però non riesco a fare la decodifica; ho provato a fare così:

Codice sorgente - presumibilmente Plain Text

  1. cypherText[i] = alfabeto[(alfabeto.IndexOf(cypherText[i]) - 1) % 26];



Però mi da l'errore che indica è andato fuori dal range dei valori dell'array.

Il problema si presenta quando ci sono le 'z', perchè la z corrisponde al valore alfabeto[25]; quindi quando faccio la codifica la z viene sostituita con la 'a', che è alla posizione alfabeto[0].
Quindi io gli dico di fare: (0 - 1) % 26. E allora mi da l'errore.

Ma allora come posso fare per far funzionare la decodifica?

PM Quote
Avatar
Qwertj (Dev Team)
Guru


Messaggi: 678
Iscritto: 30/05/2011

Segnala al moderatore
Postato alle 21:03
Mercoledì, 14/05/2014
Mi sfugge il ruolo  del +1 e del -1 in codifica e decodifica:pat:

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 21:33
Mercoledì, 14/05/2014
Ciao!
Per evitare incongruenze nella decodifica, controlla (alfabeto.IndexOf(cypherText [ i ] ) - 1) % 26. Se risulta negativo, somma 26.
Per una soluzione alternativa, vedi questo articolo: http://www.pierotofy.it/pages/guide_tutorials/CSharp/Class ...

Ultima modifica effettuata da Poggi Marco il 14/05/2014 alle 21:36
PM Quote
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 9:51
Venerdì, 16/05/2014
Grazie mille Marco, sono riuscito a risolvere ;)

PM Quote