Ich versuche, eine Benutzereingabe mit RSA-Verschlüsselung zu verschlüsseln.Java RSA-Algorithmus, der NaN während der Verschlüsselung zurückgibt
Mit meinem Debug-Monitor in Eclipse kann ich sehen, dass, wenn der Code asciiLetter mit 'e' und versucht zu mod 'n' zu betreiben, die 'e' und 'n' sind zu groß, und kommen zurück Unendlichkeit oder NaN. Irgendwelche Hinweise, wie man das ändert?
Ich änderte die Bitlänge von 1024 auf 128, aber dies hatte keine Auswirkungen.
Später muss ich entschlüsseln, aber ich versuche, diesen Teil im Voraus zu arbeiten.
public class RSA {
static int bitlength = 128;
private static Random r = new Random();
private static BigInteger p = BigInteger.probablePrime(bitlength, r);
private static BigInteger q = BigInteger.probablePrime(bitlength, r);
private static BigInteger n = p.multiply(q);
private BigInteger phi = p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE));
private static BigInteger e = BigInteger.probablePrime(bitlength/2, r);
private BigInteger d;
private static BigInteger encryptedMessage; {
while (phi.gcd(e).compareTo(BigInteger.ONE) > 0 && e.compareTo(phi) < 0) {
e.add(BigInteger.ONE);
}
BigInteger d = (e.modInverse(phi));
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Please enter your message: ");
String clearMsg = input.nextLine().trim(); // String clearMsg = input.next();
System.out.println(clearMsg); // Check message trimmed
char userInputArray[] = clearMsg.toCharArray();
ArrayList<BigInteger> cipherTextArray = new ArrayList<BigInteger>();
for (int i = 0; i < userInputArray.length; i++) {
int letter = userInputArray[i];
BigInteger bigLetter = new BigInteger(String.valueOf(letter));
BigInteger asciiLetter = (BigInteger) bigLetter;
BigInteger encryptedMessage = pow(asciiLetter, e);
BigInteger encryptM = encryptedMessage;
BigInteger encryptedMessageMod = encryptM.mod(n);
cipherTextArray.add(encryptedMessageMod);
}
System.out.println(cipherTextArray);
}
private static BigInteger pow(BigInteger asciiLetter, BigInteger e) {
// TODO Auto-generated method stub
return null;
so fragen Sie sich, warum BigInteger verschlüsselteMessage = pow (asciiLetter, e); 'nicht funktioniert? ... du hast pow nicht implementiert (...) – DarkSquirrel42
Ist das etwas mit dem Code zu tun: private statisch BigInteger pow (BigInteger asciiLetter, BigInteger e) { // TODO Automatisch generierter Methoden-Stub return null; Weil ich nicht sicher bin, was das ist, wollte Eclipse es hinzufügen. Wie ich sage, bin ich neu in der Codierung und bin ein bisschen fest :( – user7888294
Verwenden Sie 'BigInteger verschlüsselteMessage = ASCIILetter.pow (e);' stattdessen? – dejvuth