Znasz już oryginalną wersję szyfru Vigenère'a – dotyczy ona określonych zasad przy tworzeniu klucza szyfrującego. Na podstawie przedstawionego kodu napisz funkcję, która przyjmie jeden parametr – łańcuch znaków do zaszyfrowania, a następnie utworzy odpowiedni klucz (pierwszy znak klucza ma być równy „J”) i go zwróci. Przetestuj działanie programu dla łańcucha znaków do zaszyfrowania „tajnytekst”.
Specyfikacja problemu:
Dane:
doZaszyfrowania – łańcuch znaków
Wynik:
klucz – łańcuch znaków
R1cUQA09oOVWM1
Przykładowe rozwiązanie zadania:
Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny.
Linia 2. using namespace std średnik.
Linia 4. string utworzKlucz otwórz nawias okrągły string doZaszyfrowania zamknij nawias okrągły otwórz nawias klamrowy.
Linia 5. string klucz znak równości cudzysłów cudzysłów średnik.
Linia 7. klucz plus znak równości apostrof j apostrof średnik.
Linia 8. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny doZaszyfrowania kropka length otwórz nawias okrągły zamknij nawias okrągły minus 1 średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy.
Linia 9. klucz plus znak równości doZaszyfrowania otwórz nawias kwadratowy i zamknij nawias kwadratowy średnik.
Linia 10. zamknij nawias klamrowy.
Linia 12. return klucz średnik.
Linia 13. zamknij nawias klamrowy.
Linia 15. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 16. cout otwórz nawias ostrokątny otwórz nawias ostrokątny utworzKlucz otwórz nawias okrągły cudzysłów tajnytekst cudzysłów zamknij nawias okrągły średnik.
Linia 18. return 0 średnik.
Linia 19. zamknij nawias klamrowy.
31
Ćwiczenie 2
W tym zadaniu musimy rozszerzyć program z Ćwiczenia 1 o generowanie tablicy szyfrującej oraz wykonanie szyfrowania. Klucz ma być tworzony tak, jak w poprzednim zadaniu (według oryginalnej wersji szyfru Vigenère'a).
Specyfikacja problemu:
Dane:
doZaszyfrowania – łańcuch znaków
klucz – łańcuch znaków
Wynik:
Program wyświetla utworzoną tablicę szyfrującą, a w nowej linii wynik szyfrowania.
R13oYu8yiaWyA
Przykładowe rozwiązanie zadania:
Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny.
Linia 2. using namespace std średnik.
Linia 4. char alfabet otwórz nawias kwadratowy 26 zamknij nawias kwadratowy średnik.
Linia 5. char tabela otwórz nawias kwadratowy 26 zamknij nawias kwadratowy otwórz nawias kwadratowy 26 zamknij nawias kwadratowy średnik.
Linia 7. void wypelnijTablice otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 8. int z znak równości 0 średnik.
Linia 10. for otwórz nawias okrągły int i znak równości 97 średnik i otwórz nawias ostrokątny 123 średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy.
Linia 11. alfabet otwórz nawias kwadratowy z zamknij nawias kwadratowy znak równości otwórz nawias okrągły char zamknij nawias okrągły i średnik.
Linia 12. z plus plus średnik.
Linia 13. zamknij nawias klamrowy.
Linia 15. for otwórz nawias okrągły int j znak równości 0 średnik j otwórz nawias ostrokątny 26 średnik j plus plus zamknij nawias okrągły otwórz nawias klamrowy.
Linia 16. for otwórz nawias okrągły int k znak równości 0 średnik k otwórz nawias ostrokątny 26 średnik k plus plus zamknij nawias okrągły otwórz nawias klamrowy.
Linia 17. tabela otwórz nawias kwadratowy j zamknij nawias kwadratowy otwórz nawias kwadratowy k zamknij nawias kwadratowy znak równości alfabet otwórz nawias kwadratowy k zamknij nawias kwadratowy średnik.
Linia 18. zamknij nawias klamrowy.
Linia 20. for otwórz nawias okrągły int l znak równości 0 średnik l otwórz nawias ostrokątny 26 minus 1 średnik l plus plus zamknij nawias okrągły otwórz nawias klamrowy.
Linia 21. char temp znak równości alfabet otwórz nawias kwadratowy l zamknij nawias kwadratowy średnik.
Linia 22. alfabet otwórz nawias kwadratowy l zamknij nawias kwadratowy znak równości alfabet otwórz nawias kwadratowy l plus 1 zamknij nawias kwadratowy średnik.
Linia 23. alfabet otwórz nawias kwadratowy l plus 1 zamknij nawias kwadratowy znak równości temp średnik.
Linia 24. zamknij nawias klamrowy.
Linia 25. zamknij nawias klamrowy.
Linia 27. for otwórz nawias okrągły int m znak równości 0 średnik m otwórz nawias ostrokątny 26 średnik m plus plus zamknij nawias okrągły otwórz nawias klamrowy.
Linia 28. for otwórz nawias okrągły int n znak równości 0 średnik n otwórz nawias ostrokątny 26 średnik n plus plus zamknij nawias okrągły otwórz nawias klamrowy.
Linia 29. cout otwórz nawias ostrokątny otwórz nawias ostrokątny tabela otwórz nawias kwadratowy m zamknij nawias kwadratowy otwórz nawias kwadratowy n zamknij nawias kwadratowy średnik.
Linia 30. zamknij nawias klamrowy.
Linia 31. cout otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik.
Linia 32. zamknij nawias klamrowy.
Linia 34. zamknij nawias klamrowy.
Linia 36. string utworzKlucz otwórz nawias okrągły string doZaszyfrowania zamknij nawias okrągły otwórz nawias klamrowy.
Linia 37. string klucz znak równości cudzysłów cudzysłów średnik.
Linia 39. klucz plus znak równości apostrof j apostrof średnik.
Linia 40. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny doZaszyfrowania kropka length otwórz nawias okrągły zamknij nawias okrągły minus 1 średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy.
Linia 41. klucz plus znak równości doZaszyfrowania otwórz nawias kwadratowy i zamknij nawias kwadratowy średnik.
Linia 42. zamknij nawias klamrowy.
Linia 44. return klucz średnik.
Linia 45. zamknij nawias klamrowy.
Linia 47. string szyfruj otwórz nawias okrągły string doZaszyfrowania zamknij nawias okrągły otwórz nawias klamrowy.
Linia 48. string zaszyfrowane znak równości cudzysłów cudzysłów średnik.
Linia 50. string klucz znak równości utworzKlucz otwórz nawias okrągły doZaszyfrowania zamknij nawias okrągły średnik.
Linia 52. for otwórz nawias okrągły int i znak równości 0 przecinek j znak równości 0 średnik i otwórz nawias ostrokątny doZaszyfrowania kropka size otwórz nawias okrągły zamknij nawias okrągły średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy.
Linia 53. zaszyfrowane plus znak równości tabela otwórz nawias kwadratowy otwórz nawias okrągły int zamknij nawias okrągły otwórz nawias okrągły doZaszyfrowania otwórz nawias kwadratowy i zamknij nawias kwadratowy minus 97 zamknij nawias okrągły zamknij nawias kwadratowy otwórz nawias kwadratowy otwórz nawias okrągły int zamknij nawias okrągły otwórz nawias okrągły klucz otwórz nawias kwadratowy j zamknij nawias kwadratowy minus 97 zamknij nawias okrągły zamknij nawias kwadratowy średnik.
Linia 55. if otwórz nawias okrągły j znak równości znak równości klucz kropka size otwórz nawias okrągły zamknij nawias okrągły minus 1 zamknij nawias okrągły otwórz nawias klamrowy.
Linia 56. j znak równości 0 średnik.
Linia 57. zamknij nawias klamrowy.
Linia 58. else otwórz nawias klamrowy.
Linia 59. j plus plus średnik.
Linia 60. zamknij nawias klamrowy.
Linia 61. zamknij nawias klamrowy.
Linia 63. return zaszyfrowane średnik.
Linia 64. zamknij nawias klamrowy.
Linia 66. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 68. wypelnijTablice otwórz nawias okrągły zamknij nawias okrągły średnik.
Linia 69. cout otwórz nawias ostrokątny otwórz nawias ostrokątny szyfruj otwórz nawias okrągły cudzysłów tajnytekst cudzysłów zamknij nawias okrągły średnik.
Linia 71. return 0 średnik.
Linia 72. zamknij nawias klamrowy.