ამ ტოპიპჯში განვიხილავ მარტივ შიფრებს. ამგალითად base64, binary, hexa. მოკლედ დავიწყოთ და ავიღოთ სატესტო სტრინგი. მაგალითად CYBER SEC TESTERS. და გვინდა რომ ეს დავშიფროთ binary -ში. გავითვალისწინოთ რომ გამოვიყენოთ ASCII ენკოდირების სისტემა ვინაიდან UTF-8 სცდება 1 ბიტიან ჩანაწერს. ახლავე აგიხსნით რატომ. ერთ ბიტიან ჩანაწერში ეტევა მხოლოდ ეს სიმბოლოები
თუმცაღა როგროც მიხვდებოდით ძირითადად მაინც ascii -ის 96 ხილვადი სიმბოლო გამოიყენება. დანარჩენი 31 უხილავია.
ხოლო 127 დან 255 ანუ დანარჩენი სიმბოლოები რაც დარჩა ეგენი ასკი ენკოდრიების დანამატებად ითვლება
აქვე წერია რომელ სიმბოლოს რა შეესაბამება ჰექსაში ანუ თექვსმეტობით თვლის სისტემაში, ოქტალში ანუ რვაობითში და დესიმალში ანუ ათობით თვლის სისტემაში. ვინაიდან ვითვლით ჩვენ ათობითში ამოვარჩიოთ ჩვენი არჩეული სიმბოლოების შესატყვის ირიცხვები სურათის მიხედვით. მე რომ არ ვეძებო სურათზე პითონს დავიხმარებ.
პატარ კოდის რომ ხელით გადაწერა არ მოგიწიოთ
ისღა დაგვრჩენია რომ ეს ათობითის რიცხვები გადავიყვანოთ ორობითში, თექვსმეტობითში ან იმ თვლის სისტემაში რომელიც ჩვენ გვინდა. დასაწყისისთის დავიწყოთ 67 ით.
არსებობს ორი გზა გადაყვანის. პირველი ვყოფთ ორზე და მიღებულ ნაშთებს ვიწერთ რევერსულად. ანუ
67/2 მოთავსდება 33 ჯერ ნაშთი 1
33/2 მოთავსდება 16 ჯერ ნაშთი 1
16/2 მოთავსდება 8 ჯერ ნაშთი 0
8/2 მოთავსდება 4 ჯერ ნაშთი 0
4/2 მოთავსდება 2 ჯერ ნაშთი 0
2/2 მოთავსდება 1 ნაშთი 0
1/2 მოთავსდება 0 ნაშთი 1
მიღებულ ნაშთებს ვწერთ ამ შემთხვევაში ქვემოდან ზემოთ. ფურცელზე თუ გამოიყვანო მარჯვნიდან მარცხნივ მოგიწევთ ალბათ.
ანუ 1 0 0 0 0 1 1 ვინაიდნა ერთ ბიტიან ჩანაწერში 8 სიმბოლო უნდა იყოს. (კომპიუტერი ასეა მოწყობილი მე ვერ შევცვლი
) წინ ვუწერთ 0-ებს სანამ საერთო რაოდენობა არ გახდება 8-ს ტოლი. ანუ რა გამოვა 0 1 0 0 0 0 1 1
და არსებობს კიდევ ერთი ასეთი გზა.
67-ს ვშლით 2 -ის ხარისხებად.
ანუ 64+2+1
64 არის 2 -ის მეექვსე ხარისხი 2 არის 2 ის პირველი ხარისხი ხოლო 1 არის 2 ის 0 ხარისხი. ვინაიდნა ვიცით რომ ერთ ბიტიანი ჩანაწერია გამოვყოფ 8 უჯრას.
როგორც ვთქვი 64 არის 2 ის მეექვსე ხარისხი. ანუ მარჯვნიდან 7 დე უჯრაში. (კომპიუტერის ენაზე მეექვსე გამოდის ვინაიდან 0 დან იწყებს თვლას) ვწერთ 1 იანს
ანალოგიურად ვიქცევით დანარჩენებზეც. ანუ ვავსებთ ერთიანებით უჯრებს რიგით ნომრებით 1 და 0
__ 1 __ __ __ __ 1 1
7 6 5 4 3 2 1 0ხოლო დანარჩენ უჯრებს ვავსებთ ნულიანებით
0 1 0 0 0 0 1 1 ორივე ნაწილი გადაგვყავს 10 ობითში. როგორ? 0100. 1 იანი ხომ ვნახეთ რომ 2 ის ხარიხსები იყო წეღან? ანუ ამ შემთხვევაში 2-ს ავიყვანთ 2 ხარისხში. და გამოვა 4 ხოლო 0011 კი გამოდის 2 ის 1 ხარისხს + 2 ის ნული ხარისხი ანუ 2+1 ანუ გამოვიდა 3. ტექსვეტობითში როგორ ხდება ახლა ეს? თექსვმეტობითში არის მხოლოდ ეს სიმბოლოები 0123456789ABCDEF. 10-A 11-B 12-C 13-D 14-E 15-F. დანარჩენს ყველას თავისი მნიშნველობა აქვს. ანუ თუ ჩვენი ორიბითის ერთი ნაწილი იქნებოდა 1100 რაც რომ გადავიყვანოთ იქნება 12 ხოლო მეორე კი 1001 რაც რომ გადავიყვანოთ არის 9 ჩაიწერებოდა ასე C9 ხოლო ზემოთ მოყვანილ მაალითში გამოვა 43. ანდაც ამდენი რომ არ იწვალოთ პითნში დაწერთ format(67,"0b") ხოლო თუ შევსება გვინდა ერთ ბიტამდეformat(67,"08b"). გადაიყვანს ორობითში. format(67,"x") გადაიყვანს თექსვმეტობითში. რაც შეეხება base64-ს იქ გვაქვს 64 სიმბოლო. და ასე ხდება დაშიფვრა. ათობითის რიცხვები გადადის ორობითში ანუ ბინარიში. იყოფა ექვს ნაწილად. თუ საერთო რაოდენობა ექვსის ჯერადი არაა. მაშინ ბოლოში დაამატებს იმდენ 0-ს რომ გახდეს 6 ის ჯერადი. ამას ჰქვია პადინგი.თითოეული გაყოფის შედეგად მიღებულ წევრბს აქცევს ისევთ ათობითის წევრებად და მუშაობს ამ ცხრილის მიხედვით, ჰექსას პრინციპით.
ანუ თუ გადაყვანილი რიცხვი იქნება 0 მას შეცვლის A სიმბოლოთი 18- S სიმბოლთი. ხოლო თუ დამატებულმა 8 ნულმა სულ გაანულა ბიტი ასეთი რაღაც მოხდება
და დაიმატებს = სიმბოლოებს. ესაა პადინგის სიმბოლოები. და იმისთვისაა რომ აი მაგალთად ამ შემთხვევაში რომ დარჩა მხოლოდ 2 სიმბოლო ეგ შეევსო ბოლომდე. დამატებისას იმატებს 1 ბიტს. ხოლო ბიტში როცა მხოლოდ პადინგის ნულებია რამე ხომ უნდა დაწეროს. ამიტომ წერს ტოლობას. მაგიტომ არ წერია იმ ცხრილში ტოლობა და მაგიტომ გვხდებახოლმე ხშირად. დღეისთვის სულ ეს იყო. იაქტიურეთ. თუ რამე ვერ გაიგეთ დაწერთ და გიპასუხებთ
Code:
\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./0123456789:;<=>?@ ABCDEFGHIJKLMNOPQRSTUVWXYZ
[\\]^_` abcdefghijklmnopqrstuvwxyz {|}~
\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0¡¢£¤¥¦§¨©ª«¬\xad®¯°±²³´µ¶·¸¹º»¼½¾¿
ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþ

ხოლო 127 დან 255 ანუ დანარჩენი სიმბოლოები რაც დარჩა ეგენი ასკი ენკოდრიების დანამატებად ითვლება

აქვე წერია რომელ სიმბოლოს რა შეესაბამება ჰექსაში ანუ თექვსმეტობით თვლის სისტემაში, ოქტალში ანუ რვაობითში და დესიმალში ანუ ათობით თვლის სისტემაში. ვინაიდან ვითვლით ჩვენ ათობითში ამოვარჩიოთ ჩვენი არჩეული სიმბოლოების შესატყვის ირიცხვები სურათის მიხედვით. მე რომ არ ვეძებო სურათზე პითონს დავიხმარებ.

პატარ კოდის რომ ხელით გადაწერა არ მოგიწიოთ
Python:
a="CYBER SEC TESTERS"
for i in a:
print(i," - ",ord(i))
არსებობს ორი გზა გადაყვანის. პირველი ვყოფთ ორზე და მიღებულ ნაშთებს ვიწერთ რევერსულად. ანუ
67/2 მოთავსდება 33 ჯერ ნაშთი 1
33/2 მოთავსდება 16 ჯერ ნაშთი 1
16/2 მოთავსდება 8 ჯერ ნაშთი 0
8/2 მოთავსდება 4 ჯერ ნაშთი 0
4/2 მოთავსდება 2 ჯერ ნაშთი 0
2/2 მოთავსდება 1 ნაშთი 0
1/2 მოთავსდება 0 ნაშთი 1
მიღებულ ნაშთებს ვწერთ ამ შემთხვევაში ქვემოდან ზემოთ. ფურცელზე თუ გამოიყვანო მარჯვნიდან მარცხნივ მოგიწევთ ალბათ.
ანუ 1 0 0 0 0 1 1 ვინაიდნა ერთ ბიტიან ჩანაწერში 8 სიმბოლო უნდა იყოს. (კომპიუტერი ასეა მოწყობილი მე ვერ შევცვლი
და არსებობს კიდევ ერთი ასეთი გზა.
67-ს ვშლით 2 -ის ხარისხებად.
ანუ 64+2+1
64 არის 2 -ის მეექვსე ხარისხი 2 არის 2 ის პირველი ხარისხი ხოლო 1 არის 2 ის 0 ხარისხი. ვინაიდნა ვიცით რომ ერთ ბიტიანი ჩანაწერია გამოვყოფ 8 უჯრას.
__ __ __ __ __ __ __ __
7 6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
როგორც ვთქვი 64 არის 2 ის მეექვსე ხარისხი. ანუ მარჯვნიდან 7 დე უჯრაში. (კომპიუტერის ენაზე მეექვსე გამოდის ვინაიდან 0 დან იწყებს თვლას) ვწერთ 1 იანს
__ 1 __ __ __ __ __ __
7 6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
ანალოგიურად ვიქცევით დანარჩენებზეც. ანუ ვავსებთ ერთიანებით უჯრებს რიგით ნომრებით 1 და 0
__ 1 __ __ __ __ 1 1
7 6 5 4 3 2 1 0
0 1 0 0 0 0 1 1
7 6 5 4 3 2 1 0
ესაც ასე. ახლა ამის გადაყვანა ძაან მარტივია 16 ობითში. ვინაიდნა ვიცით რომ 16 არის 2 ის მეოთხე ხარისხი. ჩვენს 1 ბიტიან ჩანაწერს ანუ 8 სიმბოლოს ვყოფთ 4-4 ად. ანუ გამოდის ასე7 6 5 4 3 2 1 0
0 1 0 0 0 0 1 1 ორივე ნაწილი გადაგვყავს 10 ობითში. როგორ? 0100. 1 იანი ხომ ვნახეთ რომ 2 ის ხარიხსები იყო წეღან? ანუ ამ შემთხვევაში 2-ს ავიყვანთ 2 ხარისხში. და გამოვა 4 ხოლო 0011 კი გამოდის 2 ის 1 ხარისხს + 2 ის ნული ხარისხი ანუ 2+1 ანუ გამოვიდა 3. ტექსვეტობითში როგორ ხდება ახლა ეს? თექსვმეტობითში არის მხოლოდ ეს სიმბოლოები 0123456789ABCDEF. 10-A 11-B 12-C 13-D 14-E 15-F. დანარჩენს ყველას თავისი მნიშნველობა აქვს. ანუ თუ ჩვენი ორიბითის ერთი ნაწილი იქნებოდა 1100 რაც რომ გადავიყვანოთ იქნება 12 ხოლო მეორე კი 1001 რაც რომ გადავიყვანოთ არის 9 ჩაიწერებოდა ასე C9 ხოლო ზემოთ მოყვანილ მაალითში გამოვა 43. ანდაც ამდენი რომ არ იწვალოთ პითნში დაწერთ format(67,"0b") ხოლო თუ შევსება გვინდა ერთ ბიტამდეformat(67,"08b"). გადაიყვანს ორობითში. format(67,"x") გადაიყვანს თექსვმეტობითში. რაც შეეხება base64-ს იქ გვაქვს 64 სიმბოლო. და ასე ხდება დაშიფვრა. ათობითის რიცხვები გადადის ორობითში ანუ ბინარიში. იყოფა ექვს ნაწილად. თუ საერთო რაოდენობა ექვსის ჯერადი არაა. მაშინ ბოლოში დაამატებს იმდენ 0-ს რომ გახდეს 6 ის ჯერადი. ამას ჰქვია პადინგი.თითოეული გაყოფის შედეგად მიღებულ წევრბს აქცევს ისევთ ათობითის წევრებად და მუშაობს ამ ცხრილის მიხედვით, ჰექსას პრინციპით.
ანუ თუ გადაყვანილი რიცხვი იქნება 0 მას შეცვლის A სიმბოლოთი 18- S სიმბოლთი. ხოლო თუ დამატებულმა 8 ნულმა სულ გაანულა ბიტი ასეთი რაღაც მოხდება

და დაიმატებს = სიმბოლოებს. ესაა პადინგის სიმბოლოები. და იმისთვისაა რომ აი მაგალთად ამ შემთხვევაში რომ დარჩა მხოლოდ 2 სიმბოლო ეგ შეევსო ბოლომდე. დამატებისას იმატებს 1 ბიტს. ხოლო ბიტში როცა მხოლოდ პადინგის ნულებია რამე ხომ უნდა დაწეროს. ამიტომ წერს ტოლობას. მაგიტომ არ წერია იმ ცხრილში ტოლობა და მაგიტომ გვხდებახოლმე ხშირად. დღეისთვის სულ ეს იყო. იაქტიურეთ. თუ რამე ვერ გაიგეთ დაწერთ და გიპასუხებთ
Attachments
-
4.5 KB Views: 8