J'ai ici un chiffre additif que les forces brutes testent toutes les permutations possibles du texte chiffré fixe. Cela fonctionne très bien mais je ne peux pas, pour la vie de moi, comprendre comment implémenter l'arithmétique modulaire et la formule pour le décryptage. p = ((c-key)% 26) où p est la valeur du texte en clair et c le texte chiffré dans un tableau de lettres (A = 0, B = 1, etc.)Ceasar Cipher w/arithmétique modulaire
voici le code
public class Problem1 {
public static void main(String[] args) {
String guess = "";
String ct = "UOISCXEWLOBDOX"; // ciphertext
int key;// key to test
char ch;
for (key = 0; key < 26; key++) { // for each key value
for (int i = 0; i < ct.length(); ++i) { // test char
ch = ct.charAt(i);
if (ch >= 'A' && ch <= 'Z') {
ch = (char) (ch - key);
if (ch < 'A') {
ch = (char) (ch + 'Z' - 'A' + 1);
}
guess += ch;
} else {
guess += ch;
}
}
System.out.println("key: " + key + " " + "Decrypted Message = " + guess);
guess = "";
}
}
}// main
cE CODE eST MISE à JOUR pOUR MODULAIRE arithmatic
import java.util.*;
import java.io.*;
`public class AdditiveCipher {
public static void main(String[] args)
{
String guess = "";
//char pt = 'a';
String cipherText = "UOISCXEWLOBDOX";
int key,i,x = 0;
//array of characters we can use
char[] alphabet = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O',
'P','Q','R','S','T','U','V','W','X','Y','Z'};
//try each key on the cipher text
for(key = 0; key < 26; key++)//for each key
{
for(i = 0; i < cipherText.length(); i++)//for each letter
{
int pt = (cipherText.charAt(i) - key - 'A') % 26;
guess += (char)pt;
}
System.out.print(guess + "\n"); //display each guess
guess = "";
}//outer for
}//end main
}//end AdditiveCipher.java`
C'est ma dernière tentative après avoir essayé pendant un certain temps, il émet une tonne de boîtes. toute aide avec la logique serait appréciée, ou simplement dire ce que je fais mal
BTW une fois que vous avez la bonne valeur mod-26 vous pouvez simplement faire '(char) ('A' + pt)' - l'alphabet ASCII utilisé en Java (sous-ensemble de Unicode) a les lettres assignées à codes consécutifs. OTOH ajoutant de façon répétée à un 'String' avec' + = '(ou équivalent) est inefficace; pour un programme de jouets comme celui-ci, cela n'a probablement pas d'importance, mais avant de faire un vrai travail, vous en apprendrez plus sur 'StringBuilder'. –