Ciao a tutti, sto scrivendo per un esame un programma che sfrutta l'algoritmo di vigenere solo che non riesco a farlo funzionare, ho letto diverse spiegazioni ma quando cambio il minChar o il maxChar non funziona oppure anche solo con alcune combinazioni di chiavi e testo.
Penso che il problema sia nel fatto che la formula calcola fuori dai limiti di minChar e maxChar.
codice:class Vigenere { private final int minChar; private final int maxChar; private final String encryptKey; public static void main(String argv[]) { String key = "VERME"; String in = "RAPPORTOIMMEDIATO"; Vigenere v = new Vigenere(65, 90, key); System.out.println("Plain:\t\t" + in); System.out.println("Key:\t\t" + key); String cryptedPhrase = v.encryptString(in); System.out.println("Crypted:\t" + cryptedPhrase); System.out.println("Decrypted:\t" + v.decryptString(cryptedPhrase)); } public String encryptString(String phrase) { String result = ""; int keyIndex = 0; for (int i = 0; i < phrase.length(); i++) { char currentChar = phrase.charAt(i); char resultChar; if (minChar <= currentChar && currentChar <= maxChar) { char keyChar = encryptKey.charAt(keyIndex); int rangeLength = maxChar - minChar; resultChar = (char) (((int) currentChar + (int) keyChar - 2 * minChar) % rangeLength + minChar); result += resultChar; } else { result += currentChar; } keyIndex = (keyIndex + 1) % encryptKey.length(); } return result; } public String decryptString(String cryptedPhrase) { String result = ""; int keyIndex = 0; for (int i = 0; i < cryptedPhrase.length(); i++) { char currentChar = cryptedPhrase.charAt(i); char resultChar; if (minChar <= currentChar && currentChar <= maxChar) { char keyChar = encryptKey.charAt(keyIndex); //MinChar e MaxChar sono compresi int rangeLength = maxChar - minChar; resultChar = (char) (((int) currentChar - (int) keyChar) % rangeLength + minChar); if (resultChar < minChar) { resultChar += rangeLength; } result += resultChar; } else { result += currentChar; } keyIndex = (keyIndex + 1) % encryptKey.length(); } return result; } public Vigenere(int minChar, int maxChar, String encryptKey) { for (int i = minChar; i <= maxChar; i++) { System.out.print((char) i + ""); } System.out.println(""); this.minChar = minChar; this.maxChar = maxChar; this.encryptKey = encryptKey; } }

Rispondi quotando