Advertisement
Guest User

Untitled

a guest
May 26th, 2018
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.18 KB | None | 0 0
  1. import java.io.IOException;
  2. import java.io.UnsupportedEncodingException;
  3. import java.nio.charset.StandardCharsets;
  4. import java.nio.file.FileSystems;
  5. import java.nio.file.Files;
  6. import java.io.File;
  7. import java.io.BufferedReader;
  8. import java.io.BufferedWriter;
  9. import java.io.FileReader;
  10. import java.nio.file.Path;
  11. import java.util.Arrays;
  12. import java.nio.charset.Charset;
  13.  
  14. import sun.awt.CharsetString;
  15. /**
  16.  * Umsetzung des unter https://de.wikipedia.org/wiki/RC4 beschriebenen
  17.  * RC4-Verfahrens mit einer Alphabetlänge von 256.
  18.  */
  19.  
  20.  
  21. public class RC4 {
  22.     //Byte-Feld der Laenge 256
  23.     private byte s[] = new byte[256];
  24.  
  25.     public static final Charset ASCII = Charset.forName("ASCII");
  26.  
  27.  
  28.     /**
  29.      * Konstruktor, der den zu verwendenden geheimen Schlüssel
  30.      * entgegen nimmt. Die Zeichen sollten im Standard-ASCII-Format
  31.      * vorliegen.
  32.      * @param geheimerSchluessel Geheimer Schlüssel.
  33.      * @throws UnsupportedEncodingException
  34.      */
  35.     public RC4(String geheimerSchluessel) throws UnsupportedEncodingException {
  36.         //Byte-Feld, dass den geheimen Schluessel enthaelt
  37.         byte[] key = geheimerSchluessel.getBytes(ASCII);
  38.  
  39.  
  40.         //Byte-Feld, dass die Laenge des Schluessels enthaelt
  41.         byte length = (byte) key.length;
  42.  
  43.         //Die Werte 0 bis 255 werden dem Feld s zugewiesen
  44.         for(int i = 0; i<256;i++) {
  45.             s[i] = (byte) i;
  46.         }
  47.         int j = 0;
  48.         for(int i=0;i<256;i++) {
  49.             j = (j+s[i]+key[i % length]) %256  & 0xFF;
  50.             //s[i] und s[j] vertauschen
  51.             byte temp;
  52.             temp = s[i];
  53.             s[i] = s[j];
  54.             s[j] = temp;
  55.         }
  56.     }
  57.  
  58.  
  59.     /**
  60.      * Wende das RC4-Verfahren auf eine Zeichenkette an.
  61.      * @param eingabe Zu transformierende Zeichenkette.
  62.      * @return Transformierte Zeichenkette.
  63.      * @throws UnsupportedEncodingException
  64.      */
  65.     public String berechneTransformation(String eingabe) {
  66.  
  67.  
  68.         byte[] klarT;
  69.         klarT = eingabe.getBytes(ASCII);
  70.         byte[] schluesselT=new byte[klarT.length];
  71.         int i = 0;
  72.         int j = 0;
  73.  
  74.         for(int n = 0; n<klarT.length;n++) {
  75.             i = (i + 1)%256;
  76.             j = (j+s[i]) %256 &0xFF;       
  77.             //Vertausche s[i] und s[j]
  78.             byte temp;
  79.             temp=s[i];
  80.             s[i]= s[j];
  81.             s[j]=temp;
  82.  
  83.             //Berechnen der "Zufallszahl"
  84.             int zufallszahl;
  85.             zufallszahl= s[((s[i] + s[j])%256)&0xFF];
  86.             //Verschluesseln des Textes an der Stelle n
  87.             schluesselT[n]= (byte) ((zufallszahl ^ klarT[n]) &0xFF);
  88.         }
  89.         //  String plain = new String(klarT, "US-ASCII");
  90.         String ausgabe;
  91.  
  92.         ausgabe = new String(schluesselT, ASCII);
  93.  
  94.         return ausgabe;
  95.  
  96.  
  97.     }
  98.  
  99.     /**
  100.      * Wende das RC4-Verfahren auf eine Datei an.
  101.      * @param dateiLesen      Name der zu transformierenden Datei.
  102.      * @param dateiSchreiben  Name der zu erstellenden Datei.
  103.      * @throws IOException
  104.      */
  105.     public void transformiereDatei(String dateiLesen,
  106.             String dateiSchreiben) throws IOException {
  107.         File file = new File(dateiLesen);
  108.         Path path =file.toPath();
  109.  
  110.         byte[] encoded = Files.readAllBytes(path);
  111.         String encodedString = new String(Arrays.toString(encoded));
  112.         String  output = new String(encodedString);
  113.         path = FileSystems.getDefault().getPath(dateiSchreiben);
  114.         try( BufferedWriter writer = Files.newBufferedWriter(path))
  115.         {
  116.             writer.write(this.berechneTransformation(output));
  117.         }
  118.  
  119.  
  120.  
  121.     }
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement