All pastes #740750 Raw Edit

Someone

public text v1 · immutable
·published 2007-10-18 05:48 UTC
rendered paste body
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 <plaintext> <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) {
				Encrypt(charPtext, e, n);
				//Write(M);
			}
			temp = bufRead.read();
		}
	} // end main


	public static long expMod(long b, long e, long n) {
		String	bin;
		long	tmp;
		int		i;
		
		
		bin = Long.toBinaryString(b);
		
		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;
			}
			else if(bin.substring(i,i+1).equals("0")) {
				tmp = (tmp * tmp) % n;
			}
			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