"Il genio è la capacità di vedere 10 cose la dove l'uomo cmune ne vede 1, e dove l'uomo di talento ne vede 2 o 3." Ezra Pound
Group: Member Posts: 2309
Status:
Come detto nella mia presentazione, studio Java, e seguo da sempre PB.
NOTA: Descrizione ed introduzione li ho copiati dal commento nel codice sorgente del programma che avevo scritto!
Introduzione:
Il seguente programma è stato scritto basandosi sulla seconda stagione di Prison Break, in cui Michael Scofield (impersonato da Wentworth Miller), cifra su un origami a forma di gru del testo destinato alla dottoressa Sara Tancredi. Il primo origami contiene tre righe di puntini, separati da spazi. Gli altri 3 origami contengono un apparente numero telefonico disabilitato.
Descrizione:
Il programma cifra una frase lunga N caratteri utilizzando il procedimento di Scofield. Ogni riga di puntini deve essere abbinata al numero disattivato corrispondente. Il numero disattivato indica i tasti del cellulare, quindi ogni numero indica un preciso tasto; i puntini indicano la posizione della lettera su quel tasto.
Dopo questa introduzione e alla descrizione del programma posso passare al come esegurlo! Non preoccupatevi del sistema operativo che state utilizzando perchè è scritto in Java, quindi non avrete problemi ad eseguirlo.
Una volta scaricato il pacchetto zippato, lo dovete estrarre. Ora avete una cartella con al suo interno 3 file: uno il .bat una è l'immagine ed uno il Jar. Spostate la cartella nel suo insieme, non spostate nessun file! (altrimenti in caso fosse l'immagine non verrebbe visualizzata).
Per quelli che non si fidano: nel .bat ci sono 2 righe, potrete controllare voi stessi, una è il comando java (che indicherò li sotto), e l'altra è @pause>null in modo da non far comparire la riga dal DOS. Il programma può essere eseguito su tutti i sistemi con la JVM installata (sarebbe nella cartella in programmi denominata JRE). Come ho detto li, chi utilizza windows consiglio il file bat, in modo che venga eseguito senza dover digitare comandi dal DOS.
Chi non usa windows deve fare la seguente operazione: Aprire il terminale, o DOS: (start > esegui > cmd)
e scrivere:
CODICE
cd c:\
Ovviamente in caso sia ubuntu, dovrete mettere Scrivania
Prendere il file JAR e metterlo in C\:
Ora digitare il seguente comando:
CODICE
java -jar ProgettoScofield.jar
Se avete un problema di qualsiasi tipo segnalatelo qui
Per vedere il file cifrato sotto windows è necessario aprirlo con WordPad. Quindi tasto destro > apri con.. wordpad
Provatelo e poi ditemi che ne pensate..dalle vostre impressioni, miglioramenti..ecc..tutto quello che volete!!
"Il genio è la capacità di vedere 10 cose la dove l'uomo cmune ne vede 1, e dove l'uomo di talento ne vede 2 o 3." Ezra Pound
Group: Member Posts: 2309
Status:
Ah..siccome l'ho scritto su Ubuntu Linux ci sono dei problemi con la codifica dei caratteri. Teoricamente si dovrebbero vedere una riga di numeri e una di puntini, ma su Win ho visto che aprendolo con il notepad non è così.
Aggiornato il primo post con il codice sorgente.
Per aprirlo e vedere il file cifrato come dev'essere usate WordPad
/* La versione 0.8 Beta del programma ha superato i test ed è stata aggiornata in modo sufficiente, la versione attuale è la 1.0.
Introduzione: Il seguente programma è stato scritto basandosi sulla seconda stagione di Prison Break, in cui Michael Scofield (impersonato da Wentworth Miller), cifra su un origami a forma di gru del testo destinato alla dottoressa Sara Tancredi. Il primo origami contiene tre righe di puntini, separati da spazi. Gli altri 3 origami contengono un apparente numero telefonico disabilitato.
Descrizione: Il programma cifra una frase lunga N caratteri, utilizzando il procedimento di Scofield. Ogni riga di puntini deve essere abbinata al numero disattivato corrispondente. Il numero disattivato indica i tasti del cellulare, quindi ogni numero indica un preciso tasto; i puntini indicano la posizione della lettera su quel tasto.
Version: 1.0
Ulteriori aggiornamenti saranno: Controllo caratteri accentati (V). Successivamente output su file (V), e a seguire input da file. Al momento il programma non gestisce gli "Invio" nel testo.
Copyright (c) Marco "RootkitNeo" 2748355274. ja091690MN
Il seguente programma è distrubuito entro i termini della licenza GNU/GPL.
Aggiunta: Lettera prima parola maiuscola, abbellimenti con swing */
// cifra la frase in input void cifra(String input) throws IOException {
BufferedWriter file_n = new BufferedWriter(new FileWriter("TxtScofieldCrypt.txt")); // file contenente i numeri
boolean enter=true; // controllo quando entro nel while
// conta la stringa for(int i=0; i<input.length(); i++) { char ch = (input.charAt(i)=='è')||(input.charAt(i)=='é') ? 'e' : input.charAt(i); contatore++;
if(ch<97||ch>122) { continue; }
// controllo ogni elemento dell'array in modo da abbinarli al carattere corrispondente for(int j=2; j<caratteri_cell.length; j++) { String temp = caratteri_cell[j];
// controllo ogni carattere dell'elemento for(int k=0; k<temp.length(); k++) { if(temp.charAt(k)==ch) { number+=j; int t=k;
if(contatore==10||i==input.length()-1) { number+="n"; // scrivo i numeri file_n.write(number); dot+="n";
// scrivo i puntini file_n.write(dot); contatore=0; number=""; dot=""; } }
// chiudo il file file_n.close();
}
// Metodo che decodifica il file void decifra() throws IOException { FileReader fr; // flusso che conterrà il file BufferedReader br; // flusso che leggerà dal file attraverso readLine()
// In caso il file non si trovi nella stessa directory viene sollevata // un eccezione che lancio al main() try { fr = new FileReader("TxtScofieldCrypt.txt"); br = new BufferedReader(fr); } catch(FileNotFoundException e) { throw e; }
// flusso che scrive su di un file FileWriter fw = new FileWriter("Prova.txt");
// contatore: conta i puntini, e quindi la posizione della lettera corrispondente // k: fa scorrere i caratteri della stringa di puntini. int contatore=0, k=0;
do { // riga di numeri e di puntini. number = br.readLine(); dot= br.readLine();
if(number!= null) { // ciclo che scorre tutta la stringa di numeri for(int i=0; i<number.length(); i++) { char ch_n = number.charAt(i);
// conto i caratteri '.' while((dot.charAt(k)=='.')&&(dot.length()>k)) { contatore++; k++; } k++;
// prendo il numero del tasto e lo metto nell'array in modo da avere quel gruppo di lettere String tasto_cell = caratteri_cell[Character.digit(ch_n, 10)]; // prendo l'occorrenza del carattere. String lettera =""+ tasto_cell.charAt(contatore-1); fw.write(lettera);
// chiudo il file di lettura fr.close(); // chiudo il file di scrittura fw.close(); } }
class ProgettoScofield { public static void main(String args[]) throws IOException {
// Flusso per scrivere su console PrintWriter pw = new PrintWriter(System.out, true);
// Istanzio la classe - creo un oggetto BetaScofield bs = new BetaScofield();
String str=""; Object possible_values[] = {"1","2"}; // Scelte che compaiono nel menù a tendina
int ch1=0; long start, end;
// Apro una finestra grafica che comunica all'utente il messaggio. JOptionPane.showMessageDialog(null,"<html>Programma scritto da RootkitNeo.<br>Il seguente programma è distribuito entro i termini della licenza"+ " GNU/GPL.<br><br>Per una corretta visualizzazione dell'immagine Scofield, lasciarla nella stessa cartella del programma.<br><br>"+ "Per non avere problemi nella visualizzazione del file cifrato (per chi si trova su win) è necessario aprire il file con l'applicazione WordPad</html>");
do { // Apro una finetra grafica che riceve l'input e fa uso di un'icona personalizzata e del menù a tendina. Object ch = JOptionPane.showInputDialog(null,"n<html>Inserisci il numero corrispondente all'operazione desiderata:<ol><li>Cifra una frase con il metodo Scofield.</li><li>Decifra un file di testo con il metodo Scofield.</li></ol></html>","Scegli il numero corrispondente",JOptionPane.QUESTION_MESSAGE,new ImageIcon("Scofield.jpg"),possible_values,possible_values[0]); try { String p = ch.toString(); ch1 = Integer.parseInt(p); } catch(NullPointerException e) { // si verifica quando si preme 'Annulla' JOptionPane.showMessageDialog(null,"L'operazione è stata annullatanIl programma sarà terminato.","Operazione annullata!",JOptionPane.WARNING_MESSAGE); break; } } while(ch1 < 1 || ch1 > 2);
switch(ch1) { case 1: String str1="", input="";
str = JOptionPane.showInputDialog("Inserisci la frase/testo da codificare secondo Scofield:","Rendezvous sundown hotel gila nm"); try { // converto la stringa in minuscolo, se è presente. input = str.toLowerCase(); } catch(NullPointerException e) { // si verifica se viene premuto annulla JOptionPane.showMessageDialog(null,"L'operazione è stata annullatanIl programma sarà terminato.","Operazione annullata!",JOptionPane.WARNING_MESSAGE); break; }
// calcolo il tempo impiegato per l'esecuzione di questa operazione. start = System.currentTimeMillis(); bs.cifra(str1); end = System.currentTimeMillis();
pw.println("nnLa tua frase e' stata scritta e salvata con successo nei file 'TxtScofieldCrypt.txt'.nn"+ "Per il corretto funzionamento di un eventuale decodifica, lasciare il file presente nella stessa directory del programma JAR.nn"+ "Questo e' necessario, visto che il programma cerca il file da decodificare nella directory da dove e' stato eseguito.nn"+ "Il tempo Impiegato nella codifica e': " + (end-start) + " ms"); break; case 2: pw.println("nIl file di default che verra' decodificato e' 'TxtScofieldCrypt.txt'.n"); try {
// ottengo il tempo di elaborazione di questo compito start = System.currentTimeMillis(); bs.decifra(); end = System.currentTimeMillis();
pw.println("nL'operazione e' stata eseguita correttamente.nn"+ "Il tempo di esecuzione e' : " + (end-start) + " ms");
} catch(FileNotFoundException e) { JOptionPane.showMessageDialog(null,"nL'errore riscontrato e' di tipo FileNotFoundExceptionnn"+ "Il file 'TxtScofieldCrypt.txt' non si trova nella directory corrente.nn"+ "Spostare il file nella directory corrente in modo da poter convertire il file nel formato originario.n",null,JOptionPane.ERROR_MESSAGE); } break; } System.exit(0); } }