iud_key_imp10/Quellcodes/iud_key_rsachat/Key.java
2024-12-29 14:26:34 +01:00

193 lines
4.5 KiB
Java

/**
*
* description
*
* @version 1.0 from 15.01.2016
* @author
*/
import java.io.IOException;
import java.math.BigInteger;
import java.util.Random;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.util.*;
import java.awt.FontMetrics;
public class Key {
// Anfang Attribute
private String name;
private BigInteger n;
private BigInteger e;
private int BLOCKSIZE;
private BufferedImage image;
private String filename;
private byte[] hashCode;
// Ende Attribute
public Key(String name, BigInteger e, BigInteger n) {
this.name = name;
this.n = n;
this.e = e;
this.image = image;
this.hashCode = null;
calcBlocksize();
}
// Anfang Methoden
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public BigInteger getN() {
return n;
}
public BigInteger getE() {
return e;
}
public void setImage(String filename) {
URL pic_url = this.getClass().getClassLoader().getResource(filename+".png"); //kein Slash vor dem Unterordner!
this.filename = filename;
//Bild laden mit ImageIO
try {
image = ImageIO.read(pic_url);
} catch (IOException e) {
e.printStackTrace();
}
}
public String getFilename() {
return filename;
}
public BufferedImage getImage() {
return image;
}
private BigInteger convert(String text) {
BigInteger i = BigInteger.valueOf(0);
for(int j =0; j < text.length(); j++) {
i = i.multiply(BigInteger.valueOf(256));
i = i.add(BigInteger.valueOf((int) text.charAt(j)));
} // end of while
// System.out.println(text+" in "+i.toString()+" umgewandelt.");
return i;
}
public BigInteger convert(byte[] text) {
BigInteger i = BigInteger.valueOf(0);
for(int j =text.length-1; j >=0; j--) {
i = i.multiply(BigInteger.valueOf(256));
int unsingedByte = ((int)text[j]) & 0xFF;
// System.out.println(""+unsingedByte+" ");
i = i.add(BigInteger.valueOf(unsingedByte));
} // end of while
// System.out.println("");
// System.out.println(new String(text)+" in "+i.toString()+" umgewandelt.");
return i;
}
/* private String convert(BigInteger i) {
String text = "";
int j = 0;
while (text.length()<BLOCKSIZE) {
j = i.mod(BigInteger.valueOf(256)).intValue();
i = i.divide(BigInteger.valueOf(256));
text = (char) j+text;
} // end of while
//System.out.println(i.toString()+" in "+text+" umgewandelt.");
return text;
} */
public byte[] convert(BigInteger i) {
byte[] text = new byte[BLOCKSIZE];
int j = 0;
int x = 0;
while (!i.equals(BigInteger.ZERO)) {
j = i.mod(BigInteger.valueOf(256)).intValue();
i = i.divide(BigInteger.valueOf(256));
text[x] = (byte) j;
x++;
} // end of while
//System.out.println(i.toString()+" in "+text+" umgewandelt.");
byte[] a3 = new byte[x];
System.arraycopy(text, 0, a3, 0, x);
return a3;
}
public int calcBlocksize() {
BigInteger bs = BigInteger.valueOf(1);
int size = 1;
while (bs.compareTo(n)<0) {
bs = bs.multiply(BigInteger.valueOf(256));
size++;
}
BLOCKSIZE = size-1;
//System.out.println(size-1);
return BLOCKSIZE;
}
public String encrypt(String text) {
String kr = "";
BigInteger i;
i = convert(text);
i = i.modPow(e, n);
//System.out.println(i);
kr = kr+ convert(i);
return kr;
}
public BigInteger encrypt(BigInteger i) {
i = i.modPow(e, n);
return i;
}
public byte[] encrypt(byte[] text) {
byte[] kr;
BigInteger i;
i = convert(text);
i = i.modPow(e, n);
// System.out.println(i);
kr = convert(i);
return kr;
}
public String toString(String name) {
return "Key:Name="+name+",E="+getE()+",N="+getN();
}
public void sign(Key k, String name) {
Nachricht dummy = new Nachricht("dummy","dummy",toString(name));
dummy.generateHash();
byte[] b = dummy.getHashCode();
hashCode = k.encrypt(b);
}
public boolean isSigned() {
return hashCode!=null;
}
public byte[] getHashCode() {
return hashCode;
}
// Ende Methoden
}