here is the code:
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.StringWriter;
import java.math.BigInteger;
import java.math.BigInteger;
import java.security.SecureRandom;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Comment;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;
import java.io.StringWriter;
import java.math.BigInteger;
import java.net.Socket;
import java.security.SecureRandom;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Comment;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import sun.net.ftp.*;
public class RSA extends JFrame
{
private static BigInteger N;
private BigInteger phiN;
private BigInteger p;
private BigInteger q;
private static BigInteger e;
private static BigInteger d;
private static final int WIDTH = 600;
private static final int HEIGHT = 500;
private JLabel KeyL;
private static JTextField KeyTF;
private JButton calculateB, exitB;
private CalculateButtonHandler cbHandler;
private ExitButtonHandler ebHandler;
public RSA()
{
KeyL= new JLabel ("privateKey: ", SwingConstants.RIGHT);
KeyTF =new JTextField(10);
calculateB = new JButton("Encrypt");
cbHandler = new CalculateButtonHandler();
calculateB.addActionListener(cbHandler);
exitB = new JButton("Exit");
ebHandler = new ExitButtonHandler();
exitB.addActionListener(ebHandler);
setTitle("publicKey gui");
Container pane = getContentPane();
pane.setLayout(new GridLayout(3, 2));
pane.add(KeyL);
pane.add(KeyTF);
pane.add(calculateB);
pane.add(exitB);
setSize(WIDTH, HEIGHT);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
private class CalculateButtonHandler implements ActionListener
{
@SuppressWarnings("restriction")
public void actionPerformed(ActionEvent n)
{
try {
String key = N.toString();
String exponent = e.toString();
DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
Document doc = docBuilder.newDocument();
Element root = doc.createElement("publicKey");
doc.appendChild(root);
Comment comment = doc.createComment("publicKey");
root.appendChild(comment);
Element Key = doc.createElement("key");
Key.appendChild(doc.createTextNode(key));
root.appendChild(Key);
Comment comment1 = doc.createComment("exponent");
root.appendChild(comment1);
Element lastname = doc.createElement("exponent");
lastname.appendChild(doc.createTextNode(exponent));
root.appendChild(lastname);
TransformerFactory transfac = TransformerFactory.newInstance();
Transformer trans = transfac.newTransformer();
trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
trans.setOutputProperty(OutputKeys.INDENT, "yes");
StringWriter sw = new StringWriter();
StreamResult result = new StreamResult(new File("C:/Users/John.dell2/Documents/Ryan/java test/xml publicKey generator/publicKey.xml"));
DOMSource source = new DOMSource(doc);
trans.transform(source, result);
String xmlString = sw.toString();
String hostname = "Johndell2-PC";
String username = "system";//domain example
String password = "KVC12A";
FtpClient ftp = new FtpClient();
try {
ftp.openServer(hostname);
ftp.login(username, password);
ftp.binary();
File publicKey=(new File("C:/Users/John.dell2/Documents/Ryan/java test/xml publicKey generator/publicKey.xml"));
OutputStream out = ftp.put(publicKey.getName()); //Start upload
InputStream in = new FileInputStream(publicKey);
byte c[] = new byte[4096];
int read = 0;
while ((read = in.read(c)) != -1 ) {
out.write(c, 0, read);
}
in.close();
out.close();
ftp.closeServer();
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
String privateKey = d+xmlString;
KeyTF.setText(""+privateKey);
} catch (Exception k) {
System.out.println(k);
}
}
}
public class ExitButtonHandler implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
}
public RSA(int keySize)
{
if (keySize < 1000)
throw new IllegalArgumentException("Key size too small.");
SecureRandom rand = new SecureRandom();
generatePQ(keySize / 2, rand);
N = rsa(p, q);
phiN = p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE));
generateExponents(invertibleSet());
}
BigInteger rsa(BigInteger i, BigInteger i1) {
if(p.compareTo(q)>0){
BigInteger a=p.multiply(q);
i=a.subtract(q);
return i;
}
else{
i=p.multiply(q);
return i;
}
}
private void generatePQ(int bitLength, Random rand)
{
while (true)
{
p = generateOddPrime(bitLength, rand);
q = generateOddPrime(bitLength, rand);
if (!p.equals(q))
return;
}
}
private BigInteger generateOddPrime(int bitLength, Random rand)
{
BigInteger two = new BigInteger("2");
while (true)
{
BigInteger prime = BigInteger.probablePrime(bitLength, rand);
if (!prime.mod(two).equals(BigInteger.ZERO))
return prime;
}
}
private void generateExponents(BigInteger[] invertibleSet)
{
Random rand = new Random();
while (true)
{
BigInteger invertible = invertibleSet[rand
.nextInt(invertibleSet.length)];
BigInteger inverse = invertible.modInverse(phiN);
if (invertible.multiply(inverse).mod(phiN)
.equals(BigInteger.ONE.mod(phiN)))
{
e = invertible;
//input the alternative value of the privateKey here
d = inverse;
return;
}
}
}
private BigInteger[] invertibleSet()
{
final int maxSize = 100000;
Set<BigInteger> invertibles = new HashSet<BigInteger>();
BigInteger end = N.subtract(BigInteger.ONE);
for (BigInteger i = new BigInteger("5"); i.compareTo(end) < 0; i = i
.add(BigInteger.ONE))
{
if (i.gcd(phiN).equals(BigInteger.ONE))
{
invertibles.add(i);
if (invertibles.size() == maxSize)
break;
}
}
return invertibles.toArray(new BigInteger[invertibles.size()]);
}
private String toHex(byte[] bytes)
{
BigInteger bi = new BigInteger(1, bytes);
return String.format("%0" + (bytes.length << 1) + "X", bi);
}
public BigInteger getModulus()
{
return N;
}
public BigInteger getPublicKeyExponent()
{
return e;
}
public BigInteger getPrivateKeyExponent()
{
return d;
}
public static void main(String[] args){
RSA rectObj = new RSA();
int x = 1;
int keySize = 1024;
RSA cipher = new RSA(keySize);
}
}

New Topic/Question
Reply



MultiQuote




|