All pastes #742789 Raw Edit

Someone

public text v1 · immutable
·published 2007-10-19 20:39 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;
		BufferedWriter 	out = new BufferedWriter(new FileWriter("encrypted"));
		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)
			{	//System.out.println(charPtext);
				Encrypt(charPtext, e, n, out);
				
				charPtext[0] = charPtext[1] = charPtext[2] = 0;
				//Write(M);
				pos = 0;
			}
			temp = bufRead.read();
		}
		
		if(pos > 0)  // means there is still stuff in charater buffer, so flush it
		{	Encrypt(charPtext, e, n, out);
		}
		
		
		out.close();
		//System.out.println();
		//System.out.println(expMod(2, 8, 5));
	} // end main


	public static long expMod(long M, long e, long n) 
	{	String eBinString = Long.toBinaryString(e);
		int eBinStringLen = eBinString.length();
		long	E = 1;
		String 	bit;
		
		//System.out.println("eBinString = " + eBinString);
				
		for(int i = 0; i < eBinStringLen; i++) 
		{	bit = eBinString.substring(i,i+1);
			
			if(bit.equals("0")) 
			{	E = (E * E) % n;
				//System.out.println("0: "+tmp);
			}		
			else if(bit.equals("1")) 
			{	E = (E * E) % n;
				E = (E * M) % n;
				//System.out.println("1: "+tmp);
			}
			
		}
		
		return E;
	}


	public static void Encrypt(char[] M, long e, long n, BufferedWriter out) {
				
		//Convert to long
		long v = ((int)M[0] * 65536) + ((int)M[1] * 256) + (int)M[2];
		long E = expMod(v, e, n);
		
		String encryptedString = padString(Long.toBinaryString(E), -32, "0");
		
		System.out.print(M);
		System.out.println(" " + v + " ^ " + e + " mod " + n + " = " + E + " \t: " + encryptedString );
		
		// write encrytpedString to file
		try 
		{	out.write( encryptedString );
	    } catch (IOException ioe) {}
		
	

	}
	
	private static void writeEncryptedFile(String encryptedString)
	{	
	}

	/**
	   * Pads out a string upto padlen with pad chars
	   * @param Object.toString() to be padded
	   * @param length of pad (+ve = pad on right, -ve pad on left)
	   * @param pad character
	   * padString("123", -8, "A") => "AAAAA123"
	   */ 
	private static String padString(Object str, int padlen, String pad)
	{
		String padding = new String();
	    int len = Math.abs(padlen) - str.toString().length();
	    if (len < 1)
	      return str.toString();
	    for (int i = 0 ; i < len ; ++i)
	      padding = padding + pad;

	    return (padlen < 0 ? padding + str : str + padding);
	  }
	



}// end class Encrypt