Package org.andrearaso.redvernam

Source Code of org.andrearaso.redvernam.Vernam

/*
� This program is free software; you can redistribute it and/or modify
� it under the terms of the GNU General Public License as published by
� the Free Software Foundation; either version 2 of the License, or
� (at your option) any later version.

  This program is distributed in the hope that it will be useful,
� but WITHOUT ANY WARRANTY; without even the implied warranty of
� MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. �See the
� GNU General Public License for more details.

� You should have received a copy of the GNU General Public License
� along with this program; if not, write to the Free Software
� Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA �02111-1307 �USA
*/

package org.andrearaso.redvernam;

import java.lang.String;



/* ----------------------------------------------------------------*/
/*          VERNAM: l'algoritmo di cifratura a caratteri           */
/* ----------------------------------------------------------------*/
/* Questa classe racchiude i metodi statici Encrypt e Decript.     */
/* Come ? noto lalgoritmo funziona cos?:Convertito il testo in     */
/* array di caratteri TestoCifrato[i]=TestoInChiaro[i]+Chiave[i] . */
/* Equivalentemente: TestoInChiaro[i]=TestoCifrato[i]-Chjave[i].   */
/* Per i che va dal primo all'ultimo carattere del testo.          */
/* Esiste una variante dell'algoritmo i cui la chiave pu? essere   */
/* pi? corta del testo e ripetuta per tutto il testo , ma per      */
/* quanto pratico questo algoritmo e'insicuro se sottoposto        */
/* all'analisi delle frequenze                                     */


class Vernam
  {
    public Vernam () {} //Costruttore vuoto

                                           /*FUNZIONE DI CIFRATURA*/

    public static String encrypt (String chiaro, String chiave)
      {//prende in input il testo in chiaro e la chiave e ritorna il testo cifrato

    int i=0;        // indice dei cicli
    char aC[],bC[];        // aC: testo in chiaro in caratteri; bC: chiave in caratteri;
    aC= chiaro.toCharArray();               // converto il testo in chiaro in input in array di char aC
    bC= chiave.toCharArray();    // converto la chiave in input in array di char aC
    int n=chiaro.length();      // trovo la lunghezza del testo in chiaro = n;
    int m=chiave.length();      // trovo la lunghezza del testo cifrato = m;

    int a[]=new int [n];                    // a conterr? gli interi corrispondenti ai caratteri di aC (Caratteri in chiaro)
    int b[]=new int [m];      // b conterr? gli interi corrispondenti ai caratteri di bC (Caratteri chiave)
    int c[]=new int [n];      // c conterr? gli interi corrispondenti ai caratteri del testo cifrato



         /* --------------------------------------- */
         /*         ALGORITMO DI CIFRATURA          */
         /* --------------------------------------- */

    while (i<n)        //PER TUTTA LA LUNGHEZZA DEL TESTO IN CHIARO:
    {
      a[i]= (int) aC[i];
      /* converto l'i-esimo carattere del testo in chiaro in numero e lo metto in a[i]*/
      b[i]= (int) bC[i];
      /* converto l'i-esimo carattere della chiave in numero e lo metto in b[i]*/
      c[i]=a[i]+b[i];
      /* Sommo i caratteri precedentemente ottenuti e li metto in c[i]*/
      i++;
    }
    i=0;
    String cifrato=new String("");   // stringa che conterr? il testo cifrato
    while (i<n// Per tutta la lunghezza di c[n] (n = lunghezza testo in chiaro = lunghezza testo cifrato)
    {
    if(c[i]>=255) c[i]=255%c[i];
    /* Se l'lelemento i-esimo ? > di 255 calcola il modulo cos? dar? semre un numero corisspondente a un carattere*/
    cifrato=cifrato+(char)c[i];
    /*Trasforma i'lintero c[i] in carattere e concatenalo nella stringa da ritornare */
    i++;
    }
    return cifrato; //Ritorna il messaggio cifrato
    }



                                                        /*FUNZIONE DI DECIFRATURA*/

    public static String decrypt (String chiave, String cifrato)
      {//prende in input la chiave e ritorna e il testo cifrato e ritorna il testo in chiaro

        char bC[], cC[];    //cC:testo cifrato in carattri; bC:chiave in caratteri;
        bC=chiave.toCharArray()//Converto lla chiave in array di caratteri
        cC=cifrato.toCharArray()//Convero il testo cifrato in array di char

        int m=cifrato.length();     //metto in m la lunghezza del testo cifrato
        int b[]=new int[m];     //creo tre array di caratteri di lunghezza n: b[] per la chiave
        int c[]=new int[m];        //c[] per il testo cifrato
        int d[]=new int[m];     // d[] per il testo decifrato
        int i=0;                   //indice dei cicli



         /* --------------------------------------- */
         /*      ALGORITMO DI DECIFRATURA*/
         /* --------------------------------------- */

        while (i<m)        //PER TUTTA LA LUNGHEZZA DEL TESTO CIFRATO
        {
          c[i]= (int) cC[i];
          /*converto l'iesimo carattere cifrato in intero e lo metto in c[i]*/
          b[i]= (int) bC[i];
          /*converto l'i-esimo crarattere della chiave e lo metto in b[i]*/
          d[i]=c[i]-b[i];
          /*in d[i] metto la sottrazione dei due numeri appena ricavati (cifrato[i]-chiave[i])*/
        i++;
        }
        String decifrato=new String(""); //stringa che conter? l'elemento decifrato
        i=0;
        while (i<m)                    // per la lunghezza del testo cifrato
          {
            if (d[i]<0) d[i]=d[i]+255;
            /*Se l'i-esimo elemento della sottrazione ? negativo vi ? stato effettuato l'operazione di MOD in fase di cifratura, quindi aggiungi 255 */
            decifrato=decifrato+(char)d[i]; //trasforma l'intero in un carattere e concatenalo nella stringa
            i++;
          }
        return decifrato; //ritorna il messaggio decifrato

      }


    }
// Andrea Raso


TOP

Related Classes of org.andrearaso.redvernam.Vernam

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.