Uijt ufyu jt fodszqufe cz dbftbs djqifs. Uif lfz jt 1!
Վերևում գրված անգլերեն տեքստը չի պարունակում ոչ մի իմաստային բառ։ Բայց ոչ, սա սխալմունք չէ, իրականում այս տեքստը գաղտնագրված է 👽 !!։ Որպեսզի կարողանաք վերականգնել օրիգինալ տեքստը, հարկավոր է իմանալ, թե ի՞նչ եղանակով է տեղի ունեցել գաղտնագրումը։ Կարող ե՞ք ինքնուրույն գուշակել գաղտնագրման եղանակը, ապակոդավորել տողը և վերականգնել օրիգինալ տեքստը 🤖։
Եթե ընդհանրապես ծանոթ չեք գաղտնագրման մեթոդներին, գուցե ձեզ դժվար լինի միանգամից ապակոդավորել տողը։ Այս հուշումները կօգնեն ձեզ։
Հուշում 1
Գաղտնագրման ժամանակ այբուբենի ամեն տառը փոխարինվել է մեկ այլ տառով։ Օրինակ այս տեքստում բոլոր
a
տառերը փոխարինվել են b
տառով։ Իսկ t
տառերը փոխարինվել է u
տառով։ Եվս մեկ անգամ նայե՛ք անգլերեն այբուբենի տառերին, և օգտագործելով այս ինֆորմացիան փորձեք գտնել տառերի փոխարինման օրինաչափություն։ Հուշում 2
Փոխարինումը պատահական չէ։ Իրականում ամեն մի տառը տեղաշարժվել է նույն, ֆիքսած թվով։ Եթե a-ն փոխարինվել է b-ով, t-ն փոխարինվել է u-ով, կարող ենք ենթադրել, որ գաղտնագրման ժամանակ այբուբենի ամեն տառը տեղաշարժվել է 1-ով։

Դե ինչ, հուսով եմ հուշումները օգնեցին ձեզ ապակոդավորել տողը։ Եթե ոչ, եկեք միասին փորձենք ապակոդավորել այն։ Գաղտնագրման ժամանակ այբուբենի ամեն տառը տեղաշարժվել է դեպի աջ
1
դիրքով։ Սա նշանակում է, որ տողում բոլոր a (A)
տառերը փոխարինվել են b (B)
-ով, բոլոր b (B)
տառերը փոխարինվել են c (C)
-ով, d
տառերը e
-ով և այդպես շարունակ։ Սկզբնական տեքստը վերականգնելու համար մեզ մնում է միայն տեքստի տառերը
1
դիրքով տեղաշարժել հակառակ ուղղությամբ։ Բացենք անգլերեն այբուբենը և գաղտնագրված տողում տառերը հերթով փոխարինենք իրենցից մեկ դիրքով ձախ գտնվող տառերով՝ U → T, i → h, j → i, t → s
և այսպես շարունակ։
Բոլոր տառերը փոխարինելուց հետո կստանանք ապակոդավորված տողը 🦾։
Uijt ufyu jt fodszqufe cz dbftbs djqifs. Uif lfz jt 1!
This text is encrypted by caesar cipher. The key is 1!
Գաղտնագրման այս եղանակը հայտնի է Կեսարի գաղտնագրում անունով, քանի որ այն լայնորեն կիրառել է Հուլիոս Կեսարի կողմից գաղտնի նամակները ծածկագրելու համար։ Ի տարբերություն այս օրինակի, Կեսարը հիմնականում օգտագործում էր տեղաշարժ 3-ով։ Սա նշանակում է, որ
A
տառը փոխարինվում է D
-ով, B
տառը փոխարինվում է E
-ով, C
տառը F
-ով և այդպես շարունակ։ Այս սկզբունքով HELLO
բառը գաղտնագրելուց հետո կստանանք KHOOR
տողը։ Նամակի հասցեատերը ծածկագրած նամակի հետ միասին ստանում էր նաև օգտագործած տեղաշարժի թիվը (այսուհետ այդ թիվը կանվանենք բանալի)։ Նամակը վերականգնելու համար հարկավոր է ուղղակի տեղաշարժել տառերը նույն քանակով, բայց հակառակ ուղղությամբ։ Իհարկե, ժամանակակից աշխարհում այսպիսի գաղտնագրումը այդքան էլ ապահով չէ։ Բայց մ.թ.ա 100 թվականին այս գաղտնագրումը, երևի թե համարվում էր չափազանց ապահով։
Դե ինչ, եկե՛ք նախագծենք և իրականացնենք ծրագիր, որը օգտագործողից պահանջում է մուտքագրել տող և գաղտնագրման բանալի և էկրանին տպում է գաղտնագրված տողը։
Եկե՛ք մի քիչ ավելի մանրամասն ուսումնասիրենք ալգորիթմը։
- Եթե որպես բանալի ընտրել ենք 3 թիվը, ապա
A(a)
տառը կփոխարինվիD(d)
տառով։ Իսկ ի՞նչ տառով կփոխարինվեն այբուբենի վերջին 3՝X, Y, Z
տառերը։X
տառը կփոխարինվիA
-ով,Y
-ըB
-տառով,Z
տառըC
-ով։ Այսինքն այբուբենի վերջին տառերը փոխարինվում են առաջին տառերով և այսպես շարունակ։

- Որպես բանալի կարող ենք ընտրել կամայական թիվ։ Անգլերեն այբուբենը ունի
26
տառ։ Եթե որպես բանալի ընտրենք25
թիվը, ապա գաղտնագրումից հետոa
տառին կհամապատասխանիz
տառը։ Եթե ընտրենք26
թիվը,a
-ին նորից կհամապատասխանիa
տառը։ Եթե ընտրենք27
թիվը,a
տառին կհամապատասխանիb
-ն և այսպես շարունակ։
- Ալգորիթմը մեծատառ տառերը փոխարինում է համապատասխան մեծատառով, փոքրատառերը՝ փոքրատառերով (
HELLO
→KHOOR
,hello
→khoor
)։
- Թվերը և հատուկ սիմվոլները չեն գաղտնագրվում (
HE LLO
!
→KH OOR
!
)։
- Պարզության համար ընդունենք, որ մուտքագրված բանալին պետք է լինի ոչ բացասական թիվ։
- Ծրագրի օգտագործումը պարզ դարձնելու համար, մուտքագրված տեքստը և բանալին անհրաժեշտ է տպել էկրանին հետևյալ ֆորմատով՝
-
“plaintext: ”
։ այնուհետև օգտագործողի մուտքագրած տողը։ “key: ”
այնուհետև մուտքագրած բանալու արժեքը։
- Գաղտնագրված տողը պետք է տպել էկրանին հետևյալ ֆորմատով՝
“ciphertext: ”
այնուհետև գաղտնագրված տողը։
Հուշում 1
Վերհիշեք բառախաղ խնդրի լուծումը։
Հուշում 2
Փորձեք համարակալել այբուբենի տառերը 0-ից 25.

Եթե օրինակ, բանալին հավար է 2,
Z
տառը կոդվելու համար պետք է օգտագործել այս բանաձևը՝ (25+2)%26 == 1 (B)
։ Այս բանաձևը ճիշտ է բոլոր տառերի և բանալու արժեքների համար։ Օրինակ, եթե բանալին հավասար է 30
, A
տառը կկոդավորվի (0+30)%26 == 4 → E
- տառով։Հուշում 3
Ինչպես և Բառախաղ խնդրի դեպքում, այստեղ ևս փորձեք «արտապատկերել» ASCII աղյուսակը վերևում պատկերված աղյուսակին (
65→0, 66→1, 67→3
և այլն)։ 
Ծրագրավորման ոճ
Խնդիրը գրելուց առաջ, ևս մեկ անգամ կարդացեք “Ծրագրավորման ոճ” դասը։ Մի՛ գրեք ամբողջ ծրագիրը մեկ main ֆունկցիայի մեջ։ Մտածեք, թե ի՞նչ տրամաբանական հատվածների (ֆունկցիաների) է կարելի բաժանել ծրագիրը, որպեսզի կոդը լինի հնարավորինս ընթեռնելի։ Ֆունկցիաներ գրելիս, փորձեք պահպանել «եզակի պատասխանատվության» (single responsobility) սկզբունքը։ Օգտագործե’ք մտածված և իմաստային անուններ և՛ փոփխականների և՛ ֆունկցիաների համար։