我已经完成了我的凯撒密码,现在我遇到的问题是不能得到z
而不是|
。我使用US-ASCII。
下面是我的代码:
public static void main {
final String GERMAN_LANGUAGE_PATTERN = "Werden zwei Glasstaebe mit einem Wolltuch gerieben, dann kann man feststellen, dass sich die beiden Staebe gegenseitig abstossen. Wird das gleiche Experiment mit zwei Kunststoffstaeben wiederholt, dann bleibt das Ergebnis gleich, auch diese beiden Staebe stossen sich gegenseitig ab. Im Gegensatz dazu ziehen sich ein Glas und ein Kunststoffstab gegenseitig an. Diese mit den Gesetzen der Mechanik nicht zu erklaerende Erscheinung fuehrt man auf Ladungen zurueck. Da sowohl Anziehung als auch Abstossung auftritt, muessen zwei verschiedene Arten von Ladungen existieren. Man unterscheidet daher positive und negative Ladungen.";
final String ENCRYPTED_MESSAGE = "ugjt iwv! fw jcuv fgp eqfg igmpcemv wpf fkt uq twjo wpf gjtg gtyqtdgp. ykg fw ukgjuv, kuv fkgugu xgtuejnwguugnwpiuxgthcjtgp ugjt ngkejv |w mpcemgp. mqornk|kgtvgtg xgthcjtgp ygtfgp kp cpfgtgp xgtcpuvcnvwpigp pcgjgt dgvtcejvgv.";
private static final char SEPARATOR = ' ';
public static void main(String[] args) {
int[] values = {1, 3, 5, 7, 3};
// int[] values2 = {4, 0, 3, 4, 10};
int maxIndex = getIndexOfMaximumEntry(values);
System.out.println(maxIndex);
CaesarChiffre caesarChiffre = new CaesarChiffre();
// Get the histogram of the German language pattern
int[] histogram = getHistogram(caesarChiffre.GERMAN_LANGUAGE_PATTERN);
// Find the index of the maximum entry in the histogram
int significantIndex = getIndexOfMaximumEntry(histogram);
// Get the character at the significantIndex
char significantLetter = (char) significantIndex;
// Calculate quantity and quota
int quantity = histogram[significantIndex];
double quota = ((double) quantity / caesarChiffre.GERMAN_LANGUAGE_PATTERN.length()) * 100;
// Print the results
System.out.println("Most significant letter: " + significantLetter);
System.out.println("Quantity: " + quantity + " times (" + quota + "% of the whole text).");
// Return the significant letter
char result = getSignificantLetter(caesarChiffre.GERMAN_LANGUAGE_PATTERN);
// b) Get the significant letters for the encrypted text and language pattern
char sigOfChiffre = getSignificantLetter(caesarChiffre.ENCRYPTED_MESSAGE);
char sigOfPattern = getSignificantLetter(caesarChiffre.GERMAN_LANGUAGE_PATTERN);
// c) Calculate the shift
int shift = sigOfChiffre - sigOfPattern;
// d) Print the intermediate decoding results
System.out.println("Most significant letter in the pattern text: " + sigOfPattern);
System.out.println("Most significant letter in the encrypted text: " + sigOfChiffre);
System.out.println("Resulting shift: " + shift);
// e) Return the shift
System.out.println("Result of getShift: " + shift);
// 7. Call the decode method from the main method
String decodedText = decode(caesarChiffre.ENCRYPTED_MESSAGE, caesarChiffre.GERMAN_LANGUAGE_PATTERN);
// 8. Print the encrypted and decoded texts
System.out.println("Unreadable, encrypted input text:");
System.out.println(caesarChiffre.ENCRYPTED_MESSAGE);
System.out.println("Readable, decoded output text:");
System.out.println(decodedText);
// 9. Add a comment with the decrypted text and the key to the end of the main method
// Decrypted text: [Your decrypted text]
// Key: Shifted by 2
}
public static int[] getHistogram(String text) {
int[] histogram = new int[128];
String[] words = text.split(String.valueOf(SEPARATOR));
for (String word : words) {
String lowercaseWord = word.toLowerCase();
for (int i = 0; i < lowercaseWord.length(); i++) {
char c = lowercaseWord.charAt(i);
histogram[c]++;
}
}
return histogram;
}
public static int getIndexOfMaximumEntry(int[] values) {
int maxIndex = 0;
for (int i = 1; i < values.length; i++) {
if (values[i] > values[maxIndex]) {
maxIndex = i;
}
}
return maxIndex;
}
public static char getSignificantLetter(String text) {
int[] histogram = getHistogram(text);
int significantIndex = getIndexOfMaximumEntry(histogram);
return (char) significantIndex;
}
public static int getShift(String encryptedText, String languagePattern) {
char sigOfChiffre = getSignificantLetter(encryptedText);
char sigOfPattern = getSignificantLetter(languagePattern);
return sigOfChiffre - sigOfPattern;
}
// f) Method to decode the text
// f) Method to decode the text
public static String decode(String encryptedText, String languagePattern) {
// g) Get the shift value
int shift = getShift(encryptedText, languagePattern);
// h) Convert encryptedText to char array
char[] lettersEncryptedText = encryptedText.toCharArray();
// i) Shift characters in the array
for (int i = 0; i < lettersEncryptedText.length; i++) {
char c = lettersEncryptedText[i];
// Check if the character is an ASCII letter or a printable character
if (Character.isLetter(c)) {
// Adjust the shift calculation for both uppercase and lowercase letters
char base = (c >= 'a' && c <= 'z') ? 'a' : 'A';
lettersEncryptedText[i] = (char) ((c - shift - base + 26) % 26 + base);
}
}
// j) Convert the char array to a String
String decoded = new String(lettersEncryptedText);
// Return the decoded text
return decoded;
}
}
I need
```none
sehr gut! du hast den code geknackt und dir so ruhm und ehre erworben. wie du siehst, ist dieses verschluesselungsverfahren sehr leicht zu knacken. kompliziertere verfahren werden in anderen veranstaltungen naeher betrachtet.
字符串
而不是
sehr gut! du hast den code geknackt und dir so ruhm und ehre erworben. wie du siehst, ist dieses verschluesselungsverfahren sehr leicht |u knacken. kompli|iertere verfahren werden in anderen veranstaltungen naeher betrachtet.
型
1条答案
按热度按时间hgc7kmma1#
这里有一个例子。这只适用于非整数值。
字符串
输出
型