Diskuze: prosím, těžká úloha na šifrování
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 4 zpráv z 4.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj, neviem veľmi o čo si sa v kóde snažil, ale v texte sa píše, že
šifrovať máš len písmená anglickej abecedy
Dám sem niečo narýchlo napísané snáď to pôjde
import java.io.*;
class Scratch {
private static final String ENCRYPTED_FILE_PATH = "sifrovany.txt";
private static final String DECRYPTED_FILE_PATH = "otevreny.txt";
private static final String KEY = "ABG";
private static final int ALPHABET_SIZE = 'Z' - 'A' + 1;
public static void main(String[] args) throws IOException {
Scratch s = new Scratch();
s.encryptTextFromFile(KEY, DECRYPTED_FILE_PATH, ENCRYPTED_FILE_PATH);
s.decryptTextFromFile(KEY, ENCRYPTED_FILE_PATH, DECRYPTED_FILE_PATH);
}
public void encryptTextFromFile(String key, String inputFilePath, String outputFilePath) throws IOException {
try (BufferedReader reader = new BufferedReader(new FileReader(inputFilePath))) {
try (FileWriter fileWriter = new FileWriter(outputFilePath)) {
int actualKeyOffset = 0;
char newChar;
String line = reader.readLine();
while (line != null) {
for(Character ch : line.toCharArray()){
if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')){
newChar = (char) (Character.toUpperCase(ch) + Character.toUpperCase(key.charAt(actualKeyOffset)) - 'A');
fileWriter.write(newChar > 'Z' ? newChar - ALPHABET_SIZE : newChar);
actualKeyOffset = (actualKeyOffset + 1) % key.length();
} else {
fileWriter.write(ch);
}
}
line = reader.readLine();
if(line != null){
fileWriter.write('\n');
}
}
}
}
}
public void decryptTextFromFile(String key, String inputFilePath, String outputFilePath) throws IOException {
//...
}
}
Pre dešifrovanie v metóde decryptTextFromFile len zmeníš dva riadky na
newChar = (char) (Character.toUpperCase(ch) - Character.toUpperCase(key.charAt(actualKeyOffset)) + 'A');
fileWriter.write(newChar < 'A' ? newChar + ALPHABET_SIZE : newChar);
Nakoniec k tomu zisteniu kľúča, neviem aké máš podmienky, ale ak môžeš použiť zašifrovaný a zároveň aj pôvodný text tak stačí ak použiješ logiku z metódy decryptTextFromFile s tým, že riadok z toho súboru prolomit.txt budeš dešifrovať kľúčom ktorý bude tvoj pôvodný text z otevreny.txt.
Ak ti to nepôjde tak kľudne píš, nejako to doriešime alebo vylepšíme
Jediné co mi tam nejde je ten řádek kde je: Scratch s = new Scratch();
jinak se to tváří dobře
To je tak keď nestačí len úplne všetko skopírovať a dať do svojho kódu. Ja mám triedu nazvanú inak než ty. Tak napr. prepíš Scratch na Encryption ako máš ty. Trocha nad tým treba aj porozmýšľať a viacej kódiť a potom sa nezasekneš na takej drobnosti
Zobrazeno 4 zpráv z 4.