Ich schreibe ein Programm zum Verschlüsseln und Entschlüsseln von Text mit RSA. Die Werte von P, Q und E werden vom Benutzer zur Verfügung gestellt und überprüft, ob sie Primzahlen sind. Das Programm findet N und D. Die Verschlüsselung und Entschlüsselung sind fehlerhaft. Ich habe mir hier ein paar Fragen angeschaut und die meisten von ihnen benutzen Bibliotheken, die ich für diese Aufgabe nicht verwenden soll. Code-Schnipsel-Verschlüsselung:RSA-Entschlüsselung in Java, RSA-Bibliotheken nicht verwendet
JMenuItem mntmEncrypt = new JMenuItem("Encrypt");
mntmEncrypt.addActionListener(new ActionListener() {
@SuppressWarnings("null")
public void actionPerformed(ActionEvent ev) {
textArea_1.setText("");
String blah = textArea.getText();
int something;
for(int i=0; i<blah.length();i++){
something =(int)(blah.charAt(i));
enc = BigInteger.valueOf((long) (Math.pow(something, e)%n));
textArea_1.append(blah.valueOf(enc) + " ");
}
und Fehlfunktionen Entschlüsselung:
JMenuItem mntmDecrypt = new JMenuItem("Decrypt");
mntmDecrypt.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent em) {
textArea_1.setText("");
String blah2 = textArea.getText();
String[] somethingElse = blah2.split(" ");
char character;
for(int i=0;i<somethingElse.length;i++){
int cipher = Integer.parseInt(somethingElse[i]);
dec = BigInteger.valueOf((long)Math.pow(cipher, d)%n);
System.out.println("Cipher: "+cipher); //print check
System.out.println("d: "+d); //print check
System.out.println("n: "+n); //print check
System.out.println("dec: "+dec); //print check
BigInteger x = BigInteger.valueOf(dec);
int x2 = x.intValue();
char c = (char) x2;
System.out.println(cipher + " " + dec);
String textBack = new String(dec.toByteArray());
textArea_1.append(String.valueOf(dec));
}
}
});
überprüfte ich den Wert von Dezember this calculator mit und es ist völlig falsch, aber ich kann nicht sehen, warum. Jede Hilfe wäre willkommen. Ich kann nichts BigInteger außer enc und dec machen.
Okay, aber zu BigInteger.modPow Schalt() würde erfordern, dass ihre Argumente sind alle BigIntegers mit zu beginnen, nicht wahr? Nicht in der Lage zu casten = sie müssen BigIntegers sein, um damit anzufangen. Dies verursacht Probleme mit vielen Dingen, einschließlich n = (p-1) (q-1). Von BigIntegern abzuziehen ist ein Schmerz. Wie würde ich das machen? Ich würde lieber die Kryptografie-Erweiterung verwenden, aber eine Lösung von Hand ist eine Voraussetzung. – Goblinette
Sie haben es, Sie müssen alles mit BigInteger - jede Berechnung, wenn Ihre Nummer nicht in "long" passen. Du kannst leicht subtrahieren: 'value = value.subtract (BigInteger.ONE)' – Robert
Ich versuche, es funktionieren zu lassen, aber da ich for-Schleifen verwende, um zu überprüfen, ob die Zahlen, die ich habe, prim sind oder nicht, gibt es noch mehr Probleme löse nun = (BigInteger hat eine prostablePrime-Methode, aber keine CheckIfPrime-Methode.) – Goblinette