public class DecodeRSA
{
 	static public void main(String[] args)
	{
		int e,p,q;
		String Key,temp="";
		System.out.println("Bitte geben sie e ein:");
		e = InOut.getInt();
		System.out.println("Bitte geben sie p ein:");
		p = InOut.getInt();
		System.out.println("Bitte geben sie q ein:");
		q = InOut.getInt();
		System.out.println("Fuer Verschluesseln 1 eingeben:");
		System.out.println("Fuer Entschluesseln 2 eingeben:");
		while(temp.equals("1") != true && temp.equals("2") != true)
		{
			temp = InOut.getLine();
		}
		if (temp.equals("1") == true)
		{
			System.out.println("Bitte geben sie den Text ein:");
			Key = InOut.getLine();
			System.out.println("Verschluesselte Nachtricht:");
			versch(Key,e,p,q);
		}
		else if (temp.equals("2") == true)
		{
			System.out.println("Bitte geben sie die Geheimnachricht ein getrennt durch leerzeichen:");
			Key = InOut.getLine();
			System.out.println("\n\nEntschluesselte Nachtricht:");
			entsch(Key,e,p,q);

		}

	}
	static public void versch(String MyString,int e,int p,int q)
	{
		int M,n,C;
		double getdouble=1;
		n = p*q;
		for(int i=0;i<MyString.length();i++)
		{
			M = (int)MyString.charAt(i);
			M = M-(int)'A'+1;
			for(int k=0;e!=k;k++)
			{
				getdouble = (getdouble*M)%n;
			}
			C = (int)getdouble;
			System.out.print(C+ " ");
			getdouble =1;
		}
		System.out.println("");
	}
	static public void entsch(String MyString,int e,int p,int q)
	{
		int C,d,n;
		char M;
		double getdouble=1;

		n = p*q;
		d = Diophant.getY(e,(p-1)*(q-1),false);
		String temp,output="";
		Integer wert;
		boolean Exit;

		for(int i=0;i<MyString.length();i++)
		{
			temp = "";
			Exit = false;

			for(int k=i; Exit == false && k < MyString.length();k++)
			{
				if (MyString.charAt(k)!=' ')
				{
					temp = temp + MyString.charAt(k);

				}
				else
				{
					Exit = true;
				}
				i=k;
			}

			if(temp.equals("") == false)
			{
				wert = Integer.valueOf(temp);
				C= wert.intValue();

				for(int k=0;d!=k;k++)
				{
					getdouble = (getdouble*C)%n;
				}

				M = (char)((getdouble)+(int)'A'-1);
				output = output+ M;
			}
			getdouble = 1;
		}
		System.out.println(output);
	}
}
