// Ohjelmointi 1e: palautustehtävä 2 // Salaustyökalu. #include #include #include using std::cin; using std::cout; using std::endl; using std::string; void lue_salausavain(string &tulos) { // Luetaan 26 merkkiä pitkä salausavain käyttäjältä int maara = 0; char merkki = 0; cout << "Syötä salausavain: " << endl; tulos = ""; // Lukeminen loppuu vasta kun on luettu 26 kelvollista merkkiä while (maara < 26) { merkki = cin.get(); if (merkki >= 'a' && merkki <= 'z') { tulos += merkki; maara += 1; } } } bool tarkista_salausavain(string avain) { // Tarkistetaan, esiintyvätkö kaikki merkit täsmälleen // kerran salausavaimessa. // Tulostaa virheet näytölle. char merkki = 0; bool ok = true; for (merkki = 'a'; merkki <= 'z'; merkki++) { if (avain.find(merkki) == string::npos) { ok = false; cout << "Virhe: avaimessa ei esiintynyt kirjainta "; cout << merkki << "."; cout << endl; } } return ok; } void salaa(string avain, string merkkijono, string &tulos) { // Salataan merkkijono käyttäen annettua avainta. // Avain oletetaan kelvolliseksi ja 26 merkkiä pitkäksi. unsigned int i = 0; int indeksi = 0; tulos = ""; for (i = 0; i < merkkijono.length(); i++) { // Indeksi on merkin paikka salausavaimessa // a:n paikka on 0, b:n 1, jne. // Avaimesta otetaan vastaavalla paikalla oleva merkki, // joka lisätään salaustuloksen loppuun. indeksi = merkkijono[i] - 'a'; tulos += avain[indeksi]; } } int main() { cout << "### OHJ-1151 Ohjelmointi Ie" << endl; cout << "### Petteri Aimonen, 205441, aimonen" << endl; // Luetaan ja tarkistetaan salausavain string avain(""); lue_salausavain(avain); if (!tarkista_salausavain(avain)) { return EXIT_FAILURE; } // Salataan sanoja loopissa, kunnes käyttäjä lopettaa bool jatka = true; char vastaus = 0; string tulos(""); string sana(""); while (jatka) { cout << "Syötä salattava sana: "; cin >> sana; salaa(avain, sana, tulos); cout << tulos; cout << endl; vastaus = 0; // EOF:n tullen ei jatketa cout << "Haluatko salata uuden sanan? "; cin >> vastaus; if (vastaus != 'k' && vastaus != 'K') jatka = false; } return EXIT_SUCCESS; }