import java.io.*; import java.lang.Exception; class Encrypt { public static void main (String args[]) throws java.lang.Exception { long n, e, d, ptext; int pos; FileReader in; BufferedReader bufRead; String line; char charPtext[] = new char[3]; n = e = d = ptext = 0; if(args.length < 2) { System.out.println("Usage: Encrypt <keyfile>\n"); System.exit(-1); } //Read keys in = new FileReader(args[1]); bufRead = new BufferedReader(in); //Read n line = bufRead.readLine(); n = Long.parseLong(line); //Read e line = bufRead.readLine(); e = Long.parseLong(line); //Read d line = bufRead.readLine(); d = Long.parseLong(line); System.out.println("Keys\n----\n"); System.out.println("n: "+n+"\ne: "+e+"\nd: "+d+"\n"); in = new FileReader(args[0]); bufRead = new BufferedReader(in); //Read plaintext pos = 0; int temp = bufRead.read(); while(temp > 0) { charPtext[pos%3] = (char)temp; if((++pos % 3) == 0) { System.out.print(charPtext); Encrypt(charPtext, e, n); charPtext[0] = charPtext[1] = charPtext[2] = 0; //Write(M); } temp = bufRead.read(); } if((charPtext[0] + charPtext[1] + charPtext[2]) > 0) { Encrypt(charPtext, e, n); } System.out.println(); System.out.println(expMod(2, 8, 5)); } // end main public static long expMod(long b, long e, long n) { String bin; long tmp; int i; bin = Long.toBinaryString(b); System.out.println(bin); tmp = 1; for(i = 0; i < bin.length(); i++) { if(bin.substring(i,i+1).equals("1")) { tmp = (tmp * tmp) % n; tmp = (tmp * b) % n; System.out.println("1: "+tmp); } else if(bin.substring(i,i+1).equals("0")) { tmp = (tmp * tmp) % n; System.out.println("0: "+tmp); } else { System.out.println("expMod error: non binary value: " + bin.substring(i,i+1)); System.exit(-1); } } return tmp; } public static void Encrypt(char[] M, long e, long n) { String bin; //Convert to long long v = ((int)M[0] * 65536) + ((int)M[1] * 256) + (int)M[2]; //System.out.print(v + " ^ " + e + " mod " + n + " = "); //v = expMod(v, e, n); //System.out.println(v); } }// end class Encrypt