Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    20

    [C] - Cifrari monoalfabetici - Implementazione con linguaggio C

    Dovrei implementare un algoritmo sulla cifratura monoalfabetica
    Ricevo da tastiera una chiave. il percorso del file da cifrare e poi cifro il testo NON SO COME!! Cioè hjo un idea ma non credo sia corretta vorrei che qualcuno di voi mi desse una linea da seguire.
    Vi ringrazio moltissimo!

  2. #2
    Dì la tua idea che ne discutiamo.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    20
    Originariamente inviato da MItaly
    Dì la tua idea che ne discutiamo.
    D'accordo!!!
    Allora, questo programma lo sto portando avanti con una mia collega. In pratica non abbiam capito benissimo i cifrari monoalfabetici per cui non siamo sicure su come bisogna procedere

    Abbiam perciò scritto un programma in c che prende da tastiera una chiave e il path di dove si trova il testo in chiaro da crittografare. Li prendiamo con gets().
    La parte che non ci è chiara è la chiave. Nel libro c'è un mezzo esempio ... la nostra chiave è un alfabeto di 26 caratteri inseriti a caso da tastiera.

    L'idea base è quella di prendere un file di test, prendere con fgetc ogni carattere, confrontarlo con l'alfabeto normale per prendere la posizione numerica del carattere ... poi prendere l'equivalente posizione nell'alfabeto/chiave e inserire in un file il testo cifrato lettera per lettera.

    C'è però un problema, intanto non siamo sicure che questo vada bene ma abbiamo problemi con il codice perche la fgetc restituisce il corrispondente intero del carattere letto ... e non riusciamo a fare il casting da intero a carattere. L'itoa non si può utilizzare nell'ansi c e l'sprintf non mi funziona ... mi restiuisce dei punti interrogativi stranissimi ...

    Intanto ditemi se fa bene proseguire cosi e se voleve mi metto pubblico il codice ...
    Grazie e scusate per questo post lunghissimo!!!

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    La fgetc restituisce un int solo per poter avere i caratteri letti nel range 0-255 e poter restituire -1 in caso errore.
    Per avere il carattere in formato char è sufficiente un cast.
    codice:
    char c=0;
    int charcode = fgetc(fp);
    if (charcode != -1) {
        c = (char) charcode;
    }
    Per quanto riguarda il resto, potresti prendere spunto dall'algoritmo di trasformazione in base64, che più o meno fa quello che ti serve.
    http://it.wikipedia.org/wiki/Base64
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5
    Non credo che Base64 sia quello che cercano... comunque per il vostro problema potete fare semplicemente così:
    • acquisite i 26 caratteri che saranno il vostro alfabeto-chiave tramite fgets (dimentica la gets, è deprecata in quanto pericolosa), memorizzandoli in un array di char;
    • scrivete una funzione che converta un char in un intero compreso tra 0 e 25, che rappresenta un carattere dell'alfabeto, riservando eventualmente un valore negativo nel caso in cui il carattere non sia alfabetico; potete verificare facilmente se un carattere è alfabetico con la funzione isalpha. Dovrete tra l'altro decidere come gestire la questione maiuscole/minuscole.
    • ciclate su tutti i caratteri da convertire, sostituendoli in-place con i caratteri convertiti; per convertirli, basterà richiamare la funzione di cui sopra passandole il carattere corrente, e utilizzare il suo valore come indice nell'array dell'alfabeto-chiave. Naturalmente dovrete aver cura di non sostituire i valori per cui la funzione restituisce un valore di errore (corrispondente a caratteri non alfabetici).
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Infatti il mio voleva essere solo un suggerimento. Tra l'altro dalla descrizione fornita di quanto richiestoè stata la prima cosa che mi è venuta in mente.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  7. #7
    Ops, ti riferivi all'esempio di wiki... non avevo capito, e infatti credevo che ti riferissi a base64 come algoritmo. Pardon.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.