დღეს განვიხილავთ კრიპტოგრაფიაში ფართოდ გამოყენებად ბიტურ ოპერატორებს. ვისაც არ წაგიკთხავ მარტივი შიფრები გთხოვთ გადახედოთ ამ სტატიას და შედმეგ დამოხივდეთ უკან. როგორც უკვე აღვნიშნე XOR, OR, AND არიან ბიტური ოპერატორები. განვიხილოთ მარტივი მაგალითები და გავიგებთ მათი მუშაობის პრინციპს უკეთ
^ - XOR
& - AND
| - OR ამ ოპერატორებს ჩავწერ ასე. ახლავე გაითვალისწინეთ რომ შემდეგში არ დაიბნათ. დავიწყოთ XOR -ით
13 ^ 36=41 რანაირად?
მოკლედ რა ხდება 13 რომ გადავიყვანოთ 1 ბიტიან ორობითში იქნება 00001101. 36 გადავიყვანოთ 1 ბიტიან ორობითში 00100100. ახლა მიდნა რომ ეს ორი ორობითი ერთმანეთის ქვემოთ დავწეროთ
0 0 0 0 1 1 0 1 -13
0 0 1 0 0 1 0 0 -36
--------------------------
0 0 1 0 1 0 0 1 -41ახლა განვიხილოდ რა მოხდა. სადაც განსხვავებული ბაიტები დაემთხვა იქ დააბრუნა 1 იანი ხოლო სადაც ერთნაირები დაემთხვა იქ დაგვიბრუნა ნულიანი
შესაბამისად შედეგს თუ გადავიყვანთ ორობითიდან ათობითში მივიღებთ 41-ს (დედას გეფიცებით დამთხვევაა)
გავაგრძელოთ და გადავიდეთ სხვა ოპერატორებზე 13 & 36=4 რანაირად?
სადაც ერთიანები დაემთხვა იქ დააბრუნა 1 იანი. ამ შემთხვევაში მესამე ბაიტი. თუ გნებავთ ნულიდან დაითვალეთ და მეორე ბაიტი გამოვა. მარა მესამე ეს დამიჯერეთ
შედეგი სახეზეა.
როგორ გამოვიყენოთ ეს კრიპტოგრაფიაში? ავიღოთ მარტივი ორობითი სტრინგი იყოს GrInch
01000111 01110010 01001001 01101110 01100011 01101000 დავქსოროთ 13 თან და
01001010 01111111 01000100 01100011 01101110 01100101 შედეგიც სახეზეა. აშკარად სხვა რიცხვი მივიღეთ. მისი დეკოდირება ძალიან მარტივია თუ ეს რიცხვი ვიცით რომელიც ფაქტობრივად გასაღებია. მაგრამ ერთი პრობლემა OR ოპერატორის შემთხვევაში 9|36 და 13|36 გვაძლევს ერთსა და იმავე შედეგს. დანარჩენების შემთხვევაში ასე ვიქცევით. ავიღებთ გასაღებიან ორიბითს და ხელახლა დავქსორავთ 13 თან (თუ კოდირებისას ქსორი გამოიყენეს, თუ & გამოიყეენს შესაბამის ოპერაციას ვაკეთებთ ხელახლა) და მივიღებთ თავდაპირველს. შეგიძიათ გატესტოთ. ანალოგურად შეგიძლიათ მოიქცეთ თუ გინდათ რომ გამოიყენოთ სტრინგი გასაღებად და არა ინტეგერის ტიპის რიცხვი. ანუ ისევ გვაქვს დასაშიფრი სტრინგი GrInch ორობითში 01000111 01110010 01001001 01101110 01100011 01101000
და გასაღები Green. Green-ს გადავიყვანთ ორობითში 01000111 01110010 01100101 01100101 01101110 და ავიღებთ დასაშიფრი სიტყვის პირველ ბიტს. 01000111 მას ჯერ დავქსორავთ(აუცილებელი არაა ქსორ გამოიყენოთ, ეს მაგალითისთვის ვთქვი) 01000111-ამასთან შემდეგ 01110010-ამასთან შემდეგ 01100101 -ამასთან შემდეგ 01100101 -ამასთან და ბოლოს 01101110 -ამასთან. რომ მორჩება გადავალთ დასაშიფრი სიტყვის მეორე ბიტზე. და ასე მივიღებთ გასაღებიან ორობითს. რაც უფრო დიდი იქნება გასაღები უფრო რთული იქნება შიფრის გატეხვა. თუმცა უფრო დატვირთული პროცესის გავლა მოუწევს მოწყობილობას და უფრო ნელა იმუშავებს.
თუ რამე გაუგებარი იყო თქვენთვის დაწერეთ. აუცილებლად გიპასუხებთ დიდი სიამოვნებით.
მოიწონეთ სტატია და გაუზიარეთ მეგობრებს. თქვენ ამით არაფერი დაგაკლდებათ ხოლო ავტორს, რომელმაც ამის წერაზე, დაედითებაზე და ასეთებზე იწვალა სტიმულს მისცემთ.
ამ შემთხვევაში კი მე ვარ ავტორი მაგრამ მარტო მე არ მეხება. ასე რომ გთხოვთ ესაც გაითვალისწინოთ.
^ - XOR
& - AND
| - OR
13 ^ 36=41 რანაირად?
0 0 0 0 1 1 0 1 -13
0 0 1 0 0 1 0 0 -36
--------------------------
0 0 1 0 1 0 0 1 -41
შესაბამისად შედეგს თუ გადავიყვანთ ორობითიდან ათობითში მივიღებთ 41-ს (დედას გეფიცებით დამთხვევაა)
გავაგრძელოთ და გადავიდეთ სხვა ოპერატორებზე 13 & 36=4 რანაირად?
0 0 0 0 1 1 0 1 -13
0 0 1 0 0 1 0 0 -36
--------------------------
0 0 0 0 0 1 0 0 - 4
ეს ოპერატორი კი ასე მოიქცა0 0 1 0 0 1 0 0 -36
--------------------------
0 0 0 0 0 1 0 0 - 4
სადაც ერთიანები დაემთხვა იქ დააბრუნა 1 იანი. ამ შემთხვევაში მესამე ბაიტი. თუ გნებავთ ნულიდან დაითვალეთ და მეორე ბაიტი გამოვა. მარა მესამე ეს დამიჯერეთ
შედეგი სახეზეა.
როგორ გამოვიყენოთ ეს კრიპტოგრაფიაში? ავიღოთ მარტივი ორობითი სტრინგი იყოს GrInch
01000111 01110010 01001001 01101110 01100011 01101000 დავქსოროთ 13 თან და
01001010 01111111 01000100 01100011 01101110 01100101 შედეგიც სახეზეა. აშკარად სხვა რიცხვი მივიღეთ. მისი დეკოდირება ძალიან მარტივია თუ ეს რიცხვი ვიცით რომელიც ფაქტობრივად გასაღებია. მაგრამ ერთი პრობლემა OR ოპერატორის შემთხვევაში 9|36 და 13|36 გვაძლევს ერთსა და იმავე შედეგს. დანარჩენების შემთხვევაში ასე ვიქცევით. ავიღებთ გასაღებიან ორიბითს და ხელახლა დავქსორავთ 13 თან (თუ კოდირებისას ქსორი გამოიყენეს, თუ & გამოიყეენს შესაბამის ოპერაციას ვაკეთებთ ხელახლა) და მივიღებთ თავდაპირველს. შეგიძიათ გატესტოთ. ანალოგურად შეგიძლიათ მოიქცეთ თუ გინდათ რომ გამოიყენოთ სტრინგი გასაღებად და არა ინტეგერის ტიპის რიცხვი. ანუ ისევ გვაქვს დასაშიფრი სტრინგი GrInch ორობითში 01000111 01110010 01001001 01101110 01100011 01101000
და გასაღები Green. Green-ს გადავიყვანთ ორობითში 01000111 01110010 01100101 01100101 01101110 და ავიღებთ დასაშიფრი სიტყვის პირველ ბიტს. 01000111 მას ჯერ დავქსორავთ(აუცილებელი არაა ქსორ გამოიყენოთ, ეს მაგალითისთვის ვთქვი) 01000111-ამასთან შემდეგ 01110010-ამასთან შემდეგ 01100101 -ამასთან შემდეგ 01100101 -ამასთან და ბოლოს 01101110 -ამასთან. რომ მორჩება გადავალთ დასაშიფრი სიტყვის მეორე ბიტზე. და ასე მივიღებთ გასაღებიან ორობითს. რაც უფრო დიდი იქნება გასაღები უფრო რთული იქნება შიფრის გატეხვა. თუმცა უფრო დატვირთული პროცესის გავლა მოუწევს მოწყობილობას და უფრო ნელა იმუშავებს.
თუ რამე გაუგებარი იყო თქვენთვის დაწერეთ. აუცილებლად გიპასუხებთ დიდი სიამოვნებით.
მოიწონეთ სტატია და გაუზიარეთ მეგობრებს. თქვენ ამით არაფერი დაგაკლდებათ ხოლო ავტორს, რომელმაც ამის წერაზე, დაედითებაზე და ასეთებზე იწვალა სტიმულს მისცემთ.
ამ შემთხვევაში კი მე ვარ ავტორი მაგრამ მარტო მე არ მეხება. ასე რომ გთხოვთ ესაც გაითვალისწინოთ.