X
Xyz1
Gast
Hallo, könnt ihr mir helfen? Es soll ein wirklich sicherer HASH berechnet werden abhängig von den Mausbewegungen in einem JPanel. Folgendes JFrame habe ich dafür erstellt:
Der Output ist zum Beispiel: bdafdc5be7b2ae116518abd9977bfbd31519bf823e8471c0fbc8870b6d6f2c9b
und mit der Umwandlung von Mouse Positions in byte Arrays bin ich noch nicht ganz d'accord:
Java:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.Point;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
public class En {
public En() {
final JPanel p1 = new JPanel();
JPanel p2 = new JPanel(new GridLayout(2, 1));
final JProgressBar b1 = new JProgressBar();
final JTextField f2 = new JTextField();
p2.add(b1);
p2.add(f2);
JFrame f1 = new JFrame();
f1.setLayout(new BorderLayout());
f1.add(p1, BorderLayout.CENTER);
f1.add(p2, BorderLayout.SOUTH);
f1.setSize(800, 800);
f1.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f1.setVisible(true);
new Timer().schedule(new TimerTask() {
private ArrayList<Point> ps = new ArrayList<Point>();
@Override
public void run() {
Point mousePosition = p1.getMousePosition();
if (mousePosition != null && (ps.isEmpty() || !ps.get(ps.size() - 1).equals(mousePosition))) {
ps.add(mousePosition);
try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
for (Point point : ps) {
bos.write(Integer.toString(point.hashCode()).getBytes(StandardCharsets.UTF_8));
}
bos.flush();
MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] digest = md.digest(bos.toByteArray());
StringBuilder sha256 = new StringBuilder(new BigInteger(1, digest).toString(16));
while (sha256.length() < 32) {
sha256.insert(0, '0');
}
b1.setValue((int) ((bos.size() < 5000 ? bos.size() : 5000) / 50.0));
f2.setText(sha256.toString());
} catch (IOException | NoSuchAlgorithmException e1) {
e1.printStackTrace();
}
}
}
}, 0, 100);
}
public static void main(String[] args) {
new En();
}
}
Der Output ist zum Beispiel: bdafdc5be7b2ae116518abd9977bfbd31519bf823e8471c0fbc8870b6d6f2c9b
und mit der Umwandlung von Mouse Positions in byte Arrays bin ich noch nicht ganz d'accord:
Integer.toString(point.hashCode()).getBytes(StandardCharsets.UTF_8)
. Kennt ihr einen besseren Weg? Danke.