package AffCh;

import java.util.*;

public class BruteForce {

	ArrayList<String> ergebnisse = new ArrayList();
	Data daten = new Data();

	public BruteForce(String userEingabe) {

		int[] cryp = convertString(userEingabe);
		int[] decryp = new int[cryp.length];

		// itteration über die inversen

		for (int i = 0; i < daten.inverse.length; i++) {

			// itteration über die möglichen additionen
			for (int j = 0; j < daten.addition.length; j++) {
				System.out.println("Das aktuelle Schlüsselpaar ist:" + " "
						+ "(" + daten.inverse[i] + "," + daten.addition[j] + ")");
				// entschüsseln jedes characters

				for (int j2 = 0; j2 < cryp.length; j2++) {
					decryp[j2] = decrypeChar(cryp[j2], daten.inverse[i],
							daten.addition[j], daten.modulo);
				}
                                //Ergebnisstring in eine Liste schreiben
				ergebnisse.add(convertInt(decryp));
				
				
			}// ende additionen

		}// ende inversen
		

	}
/*
 *Die Funktion zum Dechiffrieren
 */


	public int decrypeChar(int buchstabe, int inverse, int addition, int modulo) {

		int ergebnis = (inverse * (buchstabe - addition)) % modulo;

		return ergebnis;
	}


/*
 *String in seine Kodierungswerte übersetzen
 */
	public int[] convertString(String eingabe) {

		int[] convertToInt = new int[eingabe.length()];

		if (eingabe != null) {

			for (int i = 0; i < eingabe.length(); i++) {

				switch (eingabe.charAt(i)) {

				case 'a':

					convertToInt[i] = 0;

					break;

				case 'b':

					convertToInt[i] = 1;

					break;

			//Auf grund der lesefreundlichkeit, fehlen die restlichen buchstaben

				case 'z':

					convertToInt[i] = 25;

					break;

				case ' ':

					convertToInt[i] = 26;

					break;

				default:
					System.err.println("Kein Gültiger CHARACTER!!!");
					break;
				}

			}

		} else {
			System.err.println("Noch kein String eingegeben!!!");
		}

		return convertToInt;
	}
/*
 *Integerwerte zu einem KlartextString zusammenbasteln
 */
	public String convertInt(int[] a) {
		String ergebniss = null;

		for (int j = 0; j < a.length; j++) {

			switch (a[j]) {

			case 0:

				ergebniss += 'a';

				break;

			case 1:

				ergebniss += 'b';

				break;

//Auf grund der lesefreundlichkeit, fehlen die restlichen buchstaben

			case 25:

				ergebniss += 'z';

				break;

			case 26:

				ergebniss += ' ';

				break;

			default:
				System.err.println("Keine Gültige ZAHL!!!");
				break;
			}
		}

		return ergebniss;
	}

}
