Cifrario di Vigenère

di il
7 risposte

Cifrario di Vigenère

Buonasera,
ho provato ad implementare in C++ il cifrario di Vigenère, posto la soluzione in basso. E' accettabile?
#include <stdio.h>
#include <stdlib.h>
#include <iostream>

using namespace std;

int main()
{
	char chiave[] = "cane";
	char testo[80];
	int j=0, somma=0;
	
	cout << " Inserisci il testo da cifrare: ";
	gets(testo);

	for (int i=0; i < strlen(testo); i++)
	{
		if (int(testo[i]) == 32) continue;
		if (chiave[j] == '\0') j = 0;
		
		somma = int(testo[i]) + int(chiave[j]);

		if (somma > 218) somma -= 122;
		else somma -= 97;

		testo[i] = somma;
		j++;
	}
	cout << testo;
}

7 Risposte

  • Re: Cifrario di Vigenère

    La int non ha senso

    Intendo

    if (testo == 32) continue;

    e

    somma = testo + chiave[j];
  • Re: Cifrario di Vigenère

    Ok grazie per il suggerimento, posto il codice corretto (ho modificato la "if (testo == 32)" in modo da saltare anche punti, virgole e punti interrogativi):
    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    	char chiave[] = "cane";
    	char testo[80];
    	int j=0, somma=0;
    	
    	cout << " Inserisci il testo da cifrare: ";
    	gets(testo);
    
    	for (int i=0; i < strlen(testo); i++)
    	{
    		if (testo[i] == 32 || testo[i] == 63 || testo[i] == 44 || testo[i] == 46) continue;
    		if (chiave[j] == '\0') j = 0;
    		
    		somma = testo[i] + chiave[j];
    
    		if (somma > 218) somma -= 122;
    		else somma -= 97;
    
    		testo[i] = somma;
    		j++;
    	}
    	cout << "\n Testo cifrato: " << testo;
    }
  • Re: Cifrario di Vigenère

    Salve potrebbe gentilmente spiegarmi l ultima parte di questo programma
  • Re: Cifrario di Vigenère

    È un misto di C++ e C.
    Usualmente si può fare tutto C, C++ (nel qual caso ci sono le stringhe)
  • Re: Cifrario di Vigenère

    Non ho ben capito da cosa ricavi le operazioni if(somma>218) somma=somma-122 else somma=somma-97 come maii applichi queste formule per il cifrario di vigenere , perchè ho visto altri programmi ma questo sembra il più semplice solo che non capisco quella operazione
  • Re: Cifrario di Vigenère

    97 = 'a'
    122 = 'z'
    219 = 'a' + 'z' -> sei fuori dall'alfabeto e devi ricominciare da 'a'
  • Re: Cifrario di Vigenère

    DIOibra1 ha scritto:


    solo che non capisco quella operazione
    Conosci il codice ASCII?
Devi accedere o registrarti per scrivere nel forum
7 risposte