All pastes #945350 Raw Edit

Stuff

public text v1 · immutable
·published 2008-03-16 21:22 UTC
rendered paste body
THIS IS THE MAIN
----------------------------

class RSA
{
  public static void main(String[] args) {
  	
  	String returnedEncrypt = "Success";
  	String returnedDecrypt = "SuccessDe";
  	
  	BigInteger p = BigInteger.probablePrime (32, new Random ());
    BigInteger q = selectPrimeNotEqualTo (p);
    System.out.println (q);
    System.out.println (p);

    BigInteger n = p.multiply (q);
    BigInteger pMinus1qMinus1 = p.subtract (BigInteger.ONE).multiply (q.subtract (BigInteger.ONE));
    BigInteger e = p;
    
    if(p.compareTo(q) < 0 ) p = q;

	while(!e.gcd(pMinus1qMinus1).equals(BigInteger.ONE)) {
		e = e.add(BigInteger.ONE);
	}
    BigInteger d = e.modInverse(pMinus1qMinus1);
    
    Encrypt crypt = new Encrypt(n, e);
    Decrypt crypted = new Decrypt(d, n);
    
    try {
    returnedEncrypt = crypt.encryptFILE();
    }
    
    catch (IOException ioex) {
      System.out.println ("Input error");
      System.exit (1);
    }
    try {
    returnedDecrypt = crypted.decryptFILE();
    }
    
    catch (IOException ioex) {
      System.out.println ("Input error");
      System.exit (1);
    }
  }
  
    private static BigInteger selectPrimeNotEqualTo (BigInteger p) {
    BigInteger q;
    do {
      q = BigInteger.probablePrime (32, new Random ());
    } while (p == q);
    return q;
  }
}

THE OTHER TWO CLASSES ENCRYPT AND DECRYPT
-----------------------------------------------

class Encrypt
{
	private BigInteger n;
	private BigInteger e;
	
	Encrypt(BigInteger INn, BigInteger INe)
	{
		n = INn;
		e = INe;
	}

	public String encryptFILE()
      throws FileNotFoundException, IOException {
      	String hello = "hello";
    BufferedOutputStream out = new BufferedOutputStream (new FileOutputStream (
        "output.dat"));
    try {
      BufferedInputStream in = new BufferedInputStream (new FileInputStream (
          "test.jpg"));
      try {
        while (true) {
          byte [] test = n.toByteArray();
          int lengthREAD = test.length - 2;
          byte[] myarray = new byte[lengthREAD];
          byte[] insert = new byte[lengthREAD + 1];
          int read = in.read (myarray, 0 , lengthREAD);
  
          insert[0] = 1;
          System.arraycopy(myarray, 0, insert, 1, myarray.length);
          
          byte[] resultBlock = encryptBlock (n, e, insert);
          int length = resultBlock.length;

          if (read == -1) {
            break;
          }

          byte[] use = padding2(resultBlock, length, n, lengthREAD);
          out.write (use, 0, lengthREAD + 2);

        }
      }

      catch (IOException ioex) {
        System.out.println ("Input error");
        System.exit (1);
      }

      finally {
        in.close ();
      }
    } 
    finally {
      out.close ();
      out.flush ();
    }
    return hello;
  }
  
    private static byte[] encryptBlock (BigInteger n, BigInteger randome,
      byte[] myarray) {
    BigInteger writeBigInt = new BigInteger (myarray);
    BigInteger encrypt = (writeBigInt.modPow (randome, n));
    return encrypt.toByteArray();
  }
  
    private static byte[] padding2 (byte[] source, int length, BigInteger n, int LengthREAD) {
  	byte [] writearray = new byte[LengthREAD + 2];	
	System.arraycopy(source, 0, writearray, writearray.length - source.length, source.length);
  	return writearray;
  }
  
}

class Decrypt
{
	private BigInteger d;
	private BigInteger n;
	
	Decrypt(BigInteger INd, BigInteger INn)
	{
		n = INn;
		d = INd;
	}
 
 public String decryptFILE()
      throws FileNotFoundException, IOException {
      	String hello = "hello";
    BufferedOutputStream out = new BufferedOutputStream (new FileOutputStream (
        "decrypted.jpg"));
    try {
      BufferedInputStream in = new BufferedInputStream (new FileInputStream (
          "output.dat"));
      try {
        while (true) {
          byte [] test = n.toByteArray();
          int lengthWrite = test.length - 2;
          byte[] encryptedBlock = new byte[lengthWrite + 2];
          byte[] WriteBlock = new byte[lengthWrite];
          int read = in.read (encryptedBlock, 0 , lengthWrite + 2);

          if (read == -1) {
            break;
          }
          
          byte[] decryptedBlock = decryptBlock (encryptedBlock, d, n, lengthWrite);

          System.arraycopy(decryptedBlock, 1, WriteBlock, 0, WriteBlock.length);

          out.write (WriteBlock, 0, WriteBlock.length);
        }
      }

      catch (IOException ioex) {
        System.out.println ("Input error");
        System.exit (1);
      }

      finally {
        in.close ();
      }
    } finally {
      out.close ();
      out.flush ();
    }
    return hello;
  }
  
    private static byte[] decryptBlock (byte[] blockData, BigInteger inverse,
    BigInteger n, int LengthWrite) {
    BigInteger blockValue = new BigInteger (blockData);
    BigInteger decrypt = (blockValue.modPow (inverse, n));
    return decrypt.toByteArray ();
  }
}