Topic: Cifrario  (Letto 373 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline ronin98

  • python unicellularis
  • *
  • Post: 2
  • Punti reputazione: 0
    • Mostra profilo
Cifrario
« il: Agosto 30, 2022, 14:25 »
Buon pomeriggio a tutti, l'intenzione è di creare un qualcosa che consenta di cifrare un qualsiasi messaggio o file testo dato in input.
Faccio un esempio:
   input = "AbCa"
e poi definisco che:
  • A = 01
  • B = 02
  • C = 03
  • a = 04
  • b = 05
  • c = 06
il risultato sarà:
   01050304

Ovviamente immaginate che per ogni singolo carattere della tastiera possa essere dato un qualsiasi codice deciso dall'utente (anche più complicato come un codice alfanumerico con simboli a 12 caratteri) e che in input possa essere dato un qualsiasi testo più o meno lungo, e capite bene che ne esce fuori un qualcosa che può essere letto solo da chi sa il codice di ogni singola lettera.  Ed il tutto poi ovviamente potrà essere riconvertito..

Ho provato a creare qualcosa del genere utilizzando quello che più ricordavo dall'università (ho studiato Python per 3 mesi circa 2 anni fa) ma con "if", "replace", ecc. non vado molto avanti.

Voi potete aiutarmi a creare questo mini programmino?

Offline pastrank

  • python unicellularis
  • *
  • Post: 7
  • Punti reputazione: 0
    • Mostra profilo
Re:Cifrario
« Risposta #1 il: Agosto 31, 2022, 04:18 »
capite bene che ne esce fuori un qualcosa che può essere letto solo da chi sa il codice di ogni singola lettera.

Intanto, considera che quanto a sicurezza e' estremamente bassa. Che tu usi 2 caratteri o 20 per definire una lettera, come sembra tu voglia fare porta avere dei blocchi sempre uguali e di lunghezza uguale, facile fare sostituzioni per arrivare alla soluzione, siamo ai livelli de La ruota della fortuna :)  La cosa piu' semplice sarebbe usare una libreria come Cryptography, ma se e' solo per fare una prova per imparare qualcosa e' ovviamente diversa la situazione, ti basta usare la funzione string.replace(), tenendo conto che dovresti prima dividere la stringa nella lunghezza delle stringhe sostitutive, che altrimenti rischi di sostituire una cosa per un'altra, per esempio cosi'

line = '1234567890'
lista = [line[i:i+2] for i in range(0, len(line), 2)]
print(lista) # solo per controllo

Poi per rileggere ripulito puoi sostituire item per item nella lista, tipo
for n in range(0, len(lista)-1):
    if lista[n] == tuovalore:
      lista[n] = nuovovalore

Offline ronin98

  • python unicellularis
  • *
  • Post: 2
  • Punti reputazione: 0
    • Mostra profilo
Re:Cifrario
« Risposta #2 il: Settembre 01, 2022, 22:00 »
capite bene che ne esce fuori un qualcosa che può essere letto solo da chi sa il codice di ogni singola lettera.

Intanto, considera che quanto a sicurezza e' estremamente bassa. Che tu usi 2 caratteri o 20 per definire una lettera, come sembra tu voglia fare porta avere dei blocchi sempre uguali e di lunghezza uguale, facile fare sostituzioni per arrivare alla soluzione, siamo ai livelli de La ruota della fortuna :)  La cosa piu' semplice sarebbe usare una libreria come Cryptography, ma se e' solo per fare una prova per imparare qualcosa e' ovviamente diversa la situazione, ti basta usare la funzione string.replace(), tenendo conto che dovresti prima dividere la stringa nella lunghezza delle stringhe sostitutive, che altrimenti rischi di sostituire una cosa per un'altra, per esempio cosi'

line = '1234567890'
lista = [line[i:i+2] for i in range(0, len(line), 2)]
print(lista) # solo per controllo

Poi per rileggere ripulito puoi sostituire item per item nella lista, tipo
for n in range(0, len(lista)-1):
    if lista[n] == tuovalore:
      lista[n] = nuovovalore


Ti ringrazio per lo spunto, sono riuscito a portare a termine l'idea che avevo. Grazie mille!
Ad ogni modo per rispondere al discorso sicurezza: si è vero che si potrebbero andare a rilevare dei blocchi ripetuti però se io banalmente prendessi un testo (anche questo post sul forum) e lo cifrassi assegnando ad ogni carattere (compresi gli spazi, i simboli e i numeri) una stringa di caratteri come se fosse una password, e poi stampassi quel foglio... nessuno che possa prendere in mano quel foglio è in grado di decifrarlo perché solo io so di quanti caratteri ho creato le "password" di ogni singolo carattere e ad ogni modo servirebbero competenze informatiche credo abbastanza importanti per poter scrivere un codice che vada ad individuare i blocchi ripetuti, e poi da lì andare a tentativi. Cioè non è un qualcosa che una persona "normale" sia capace di fare, credo...

Offline pastrank

  • python unicellularis
  • *
  • Post: 7
  • Punti reputazione: 0
    • Mostra profilo
Re:Cifrario
« Risposta #3 il: Settembre 02, 2022, 00:20 »
Cioè non è un qualcosa che una persona "normale" sia capace di fare, credo...

Aspetta: supponi di avere sostituito un carattere con "emrdi12 -cc", solo per fare un esempio. Se cerchi i primi caratteri nel testo dopo, quando si ripetono, trovi la stessa lettera successiva. Se le sostituzioni sono tutte di uguale lunghezza, si trova semplicemente  dividendo per numeri successivi la posizione fino a che la divisione da resto 0. Alla fine avrai un qualcosa dove, se sostituisci le lettere con numeri, puoi cercare di capire cos'e'. Mettiamo una frase, un qualcosa tipo 11 12 12 13 14 etc etc. Vedi che la frequenza di alcuni numeri e' superiore, potrebbero essere le vocali, ma prima ancora gli spazi.  Passi quindi alle parole piu' corte, che di solito sono gli articoli, e provi a sostituire il, di, la etc etc. Ovviamente questi caratteri sono presenti anche nelle parole, e li' sostituisci. Si guardano le vocali quindi: se hai la fortuna di trovare certe parole facili, hai gia' risolto, senza nemmeno aver acceso il tuo pc.
Viceversa, se usi vera crittografia, sei piu' sicuro, e probabilmente fai pure meno fatica nel fare il programma. Puoi anche usare un programma esterno per cifrare, come GPG, oppure per comprimerlo cifrandolo, tipo 7-zip: magari va oltre le tue esigenze, ma anche fare sostituzioni e simili prende tempo...

Detto per amor di discussione, eh  :)

Offline GlennHK

  • python sapiens sapiens
  • ******
  • Post: 1.717
  • Punti reputazione: 1
    • Mostra profilo
    • La Tana di GlennHK
Re:Cifrario
« Risposta #4 il: Settembre 02, 2022, 11:36 »
Ma è per esercizio o deve servire a qualcosa?



Nel secondo caso, la letteratura è piena di algoritmi di cifratura (a chiave a?simmetrica).