python ගැන ඊලග ලිපිය ලියන්න කලින් අද වෙන මාතෘකාවක් ගැන කතා කරන්න තමා මම මේ යන්නේ..
අපිට නිතරම ඇහෙන වචන ටිකක් තමා මේ Encoding,Encrypting,Hashing..මම අද කියන්න යන්නේ මේ Encoding,Encrypting ගැන..

encoding කියල කියන්නේ මොකක් හරි ක්රමයක් පාවිච්චි කරලා එක වර්ගයක data තවත් වර්ගයකට පරිවර්තනය කිරීමක්..දැන් ඔයාල බලනව ඇති මෙහෙම එක වර්ගෙක ඉදල තව වර්ගෙකට හරවන්නෙ ඇයි කියලා..
මේකට ප්රධාන හේතු දෙකක් තියනවා.
අපි කවුරුත් දන්න ASCII,Unicode වලදි සිද්ද වෙන්නේ මේක..
ඉතින් ඕක හොද උදාහරනයක් තමා දත්ත ගබඩා කිරීම සදහා encode කිරිම ගැන.
මේකට හොදම උදාහරනය තමයි http හරහා දත්ත සම්ප්රේෂනය කරද්දි base64 කියන algorithm එකට අනුව encode කරනවා..මේ විදිහට encode කරාම english letters,number සහ තව විශෙෂ characters දෙකකට සීමා වෙන විදිහට දත්ත වෙනස් කරනවා..
ඔයාල දැකල ඇති අන්තර්ජාලයේදි URL Encode කරනවා..
උදාහරනයකට http://www.sinhalahacker.net/downloads ගත්තම
http%3A%2F%2Fwww.sinhalahacker.net%2Fdownloads
විදිහට තමා encode වෙන්නේ..
දැන් අපි උදාහරනයකට ගමු අපි ලග තියනවා අඹ ගෙඩි 20ක්.මට ඕන වෙනව මේ අඹ ගෙඩි ඔක්කොම එකවැර එහෙ මෙහෙ අරන් යන්න,එක එක තැන්වල ගබඩා කරල තියන්න වගේ දේවල් කරන්න..
ඒත් මේ විදිහට අරන් යන්න ගියොත් එක්කො මගදි වැටෙන්න පුලුවන්..නැත්තන් තැලෙන්න පුලුවන්..මේ හින්ද මම මේව දානවා පෙටි 2ක්,3ක් ඇතුලට..එතකොට දැන් මේ පෙට්ටි , අඔ ගෙඩි වගේ රෝල් වෙන්නේ නැති හින්ද මට ලේසියෙන්ම අරන් යන්නත් පුලුවන්..ඒත් එක්කම පෙට්ටි ඇතුලේ දාලා නිසා අඹ වලට ආරකෂාවකුත් ලැබිලා තියනවා..
ඔන්න ඒ මම කරේ මට අරන් යන්න,ගබඩා කරන්න ලේසි විදිහකට මේ අඔ හදව්ව එක..ඊට පස්සේ මට ඔනම වෙලාවක ආපහු අඔ ගෙඩි වෙනවෙනම ගන්න පුලුවන්..
ඔයවගේ දෙයක් තමා මේ Encoding වලදි වෙන්නේ..
එතකොට මේ encode කරන එකේ ප්රධානම වාසියක් වෙලා තියෙන්නේ පද්ධති දෙකක් අතර මේ දත්ත පාවිච්චි වෙද්දි මේ පද්ධති දෙකට දත්ත තේරුම් ගන්න පුලුවන් වෙනඑක.මෙතනදි දත්ත හොරකම් කරන්න බැරි වෙන්න දත්ත වෙනස් කිරීමක් බලාපොරොත්තු වෙන්නේ නෑ..
encode කරපු දත්ත decode කරන්නත් පුලුවන් වෙන්නේ algorithm එකකට අනුව තමා..ඒත් encode කරන්නේ ප්රසිද්ද algorithm අනුව..ඉතින් algorithm එක දන්නවනම් ඕන කෙනෙක්ට මේ encoded data එකක් decode කරන්න පුලුවන් ලේසියෙන්ම

Encrypt කරනවා කියන්නේ cryptography කියන මාතෘකාවට අදාල දෙයක්.මේකෙදි වෙන්නේ දත්ත එක තැනක ඉදලා තව තැනකට සම්ප්රේෂනය කරද්දි හරි store කරල තියද්දි හරි කාටවත් හොරකම් කරන්න බැරි විදිහකට දත්ත වෙනස් කරන එක.
දැන් උදාහරනයකට හිතන්න
^#s!MF#:5_(A!R5-(X_
ඔන්න ඔය තියෙන්නේEncrypt කරපු string එකක්..පුලුවන්නම් try කරල බලන්න ඔය මොකක්ද කියලා කයලා හොයාගන්න...
දැන් ඔයාලට තේරෙනවා නේද මේ විදිහට Encrypt කරපු දත්තයක් කවුරු හරි හොරකම් කරාට වැඩක් නෑ..මොකද එයාට ඒක තේරුම් ගන්න බෑ..
එතකොට මේ විදිහට encrypt කරපු data හදුන්වනවා ciphertext කියලා..එතකොට encrypt නොකරපු data plaintext කියල හදුන්වනවා..
එතකොට මේ encrypt කරන්න අපි පාවිච්චි කරනවා key එකක්..දැන් ඔයාල බලනවා ඇති මොකක්ද මේ key කතාව කියල..
අපි කලින් ගත්ත උදාහරනයම ගමුකෝ..
මම අර විදිහට අඹ අරන් යද්දි කාට හරි පුලුවන් පෙට්ටි ටික හොරකම් කරල අඔ ගන්න..ඒ නිසා මම මේ පෙට්ටි වලට ඉබ්බෙක් දාලා වහනවා..දැන්මේ අඹ ගන්න පුලුවන් යතුර තියන කෙනාට විතරයිනේ නේද?
අන්න ඒ දේම තමා මේ encrypt සහ decrypt කරද්දි key එකෙන් වෙන්නේ.encrypt කරපු දෙයක් decrypt කරන්න පුලුවන් වෙන්නේ ගැලපෙන key එක තියනවනම් විතරයි..
මේ key එක පාවිච්චි කරන විදිහ අනුව encrypt කිරීම ප්රධාන කොටස් 2කට බෙදෙනවා..
අපි data encrypt කරන්න පාවිච්චි කරන්නේ public key එක..මේ ciphertext එක ලබන කෙනා privet key එක පාවිච්චි කරල තමා decrypt කිරීම කරන්නේ..
උදාහරනයක් ගත්තොත් අමල් ට ඔන වෙනවා රහසිගත පනිවිඩයකි කමල්ට යවන්න..එයා කරන්නේ කමල්ගේ public key එක පාවිච්චි කරලා පනිවිඩය encrypt කරල කමල්ට යවනවා..
ඒත් මේ public key එකෙන් ආපහු decrypt කරන්න බෑ..කමල් එයා ලග තියන privet key එක පාවිච්චි කරලා මේ ciphertext එක plaintext එකකට decrypt කරගන්නවා..

දැන් ඔයාලට මතක් වෙනවා ඇති අද ගොඩක් වැදගත් වෙබ් අඩවි පාවිච්චි කරන SSL තාක්ෂනයේදි වෙන්නේත් මේ Public-key cryptography තාක්ෂනය තමයි..
හරි දැන් එහෙනම් මම දැන් පොඩි algorithm එකක් හදන්න තමා යන්නේ මේ encrypt සහ decrypt කරන්න..
මම මෙකට පාවිච්චි කරනවා Transposition cipher කියන ක්රමය සහ python language එක..
Transposition cipher කියන ක්රමයෙදි වෙන්නේ මේකයි..
දැන් අපි හිතමු plaintext එක - thisis
key එක - mymainkey
දැන් අපි මුලින්ම key එක අරගෙන ඒකේ එක පාරකට වඩා වැඩියෙන් තියන characters අයින් කරනවා..එතකොට
myainke
දැන් key එකේ length එක අනුව් alphabet එක කඩ කඩ ලියනවා..key එකේ තියන charcters අයේ ලියන්නේ නෑ
m y a i n k e
b c d f g h l
o p q r s t u
v w x y z
දැන් මම key එකේ අකාරාදීපිලිවෙලට උඩ ඉදන් පල්ලෙහට characters ටික ලියනවා.
a d q x e l u i f r y k h t m b o v n g s z y c p w
a b c d e f g h i j k l m n o p q r s t u v w x y z
ඔන්න දැන් යටින් ලිව්ව alphabet එකේ character වෙනුවට උඩ එකේ characters දාලා අපිට පුලුවන් ciphertext එක හදාගන්න..
nmhuhu
ඔන්න දැන් ඕක decode කරන්නනම් key එක තියෙන්නම ඔන..ඒත් මෙතනදි ඔය පාවිච්චි කරල තියෙන්නේ simple letters විතරනේ..ඉතින් ඔන්න මම ඔය method එකට හදපු python program එක download කරගන්නකෝ.
https://www.dropbox.com/s/rs9zrmf0uq1ype4/mycrypter.py?dl=0
ඔන්න තියනව මම කලින් කිව්ව ciphertext එක..මම ඒක crypt කරේ my#1key කියන key එකෙන්..
ඒ වගේම මෙකෙන් decrypt කරන්නත් පුලුවන්.
(මේ program එක වැඩිය test කරේ නැති නිසා සමහර විට bugs තියෙන්න පුලුවන්..)
ඒත් එක්කම hackerrank.com එකේ හොද challenge වගයක් තිබ්බ මේ cryptography ගැන..එ ටික කරොත් ඔයාලටත් හොද අවබෝධයක් ලැබෙයි..
https://www.hackerrank.com/domains/security/cryptography
අපිට නිතරම ඇහෙන වචන ටිකක් තමා මේ Encoding,Encrypting,Hashing..මම අද කියන්න යන්නේ මේ Encoding,Encrypting ගැන..
Encoding
encoding කියල කියන්නේ මොකක් හරි ක්රමයක් පාවිච්චි කරලා එක වර්ගයක data තවත් වර්ගයකට පරිවර්තනය කිරීමක්..දැන් ඔයාල බලනව ඇති මෙහෙම එක වර්ගෙක ඉදල තව වර්ගෙකට හරවන්නෙ ඇයි කියලා..
මේකට ප්රධාන හේතු දෙකක් තියනවා.
දත්ත ගබඩා කිරීම සදහා.(Store Data)
අපි කවුරුත් දන්න ASCII,Unicode වලදි සිද්ද වෙන්නේ මේක..
ඉතින් ඕක හොද උදාහරනයක් තමා දත්ත ගබඩා කිරීම සදහා encode කිරිම ගැන.
දත්ත සම්ප්රේශනය කිරීම සදහා
මේකට හොදම උදාහරනය තමයි http හරහා දත්ත සම්ප්රේෂනය කරද්දි base64 කියන algorithm එකට අනුව encode කරනවා..මේ විදිහට encode කරාම english letters,number සහ තව විශෙෂ characters දෙකකට සීමා වෙන විදිහට දත්ත වෙනස් කරනවා..
ඔයාල දැකල ඇති අන්තර්ජාලයේදි URL Encode කරනවා..
උදාහරනයකට http://www.sinhalahacker.net/downloads ගත්තම
http%3A%2F%2Fwww.sinhalahacker.net%2Fdownloads
විදිහට තමා encode වෙන්නේ..
දැන් අපි උදාහරනයකට ගමු අපි ලග තියනවා අඹ ගෙඩි 20ක්.මට ඕන වෙනව මේ අඹ ගෙඩි ඔක්කොම එකවැර එහෙ මෙහෙ අරන් යන්න,එක එක තැන්වල ගබඩා කරල තියන්න වගේ දේවල් කරන්න..
ඒත් මේ විදිහට අරන් යන්න ගියොත් එක්කො මගදි වැටෙන්න පුලුවන්..නැත්තන් තැලෙන්න පුලුවන්..මේ හින්ද මම මේව දානවා පෙටි 2ක්,3ක් ඇතුලට..එතකොට දැන් මේ පෙට්ටි , අඔ ගෙඩි වගේ රෝල් වෙන්නේ නැති හින්ද මට ලේසියෙන්ම අරන් යන්නත් පුලුවන්..ඒත් එක්කම පෙට්ටි ඇතුලේ දාලා නිසා අඹ වලට ආරකෂාවකුත් ලැබිලා තියනවා..
ඔන්න ඒ මම කරේ මට අරන් යන්න,ගබඩා කරන්න ලේසි විදිහකට මේ අඔ හදව්ව එක..ඊට පස්සේ මට ඔනම වෙලාවක ආපහු අඔ ගෙඩි වෙනවෙනම ගන්න පුලුවන්..
ඔයවගේ දෙයක් තමා මේ Encoding වලදි වෙන්නේ..
එතකොට මේ encode කරන එකේ ප්රධානම වාසියක් වෙලා තියෙන්නේ පද්ධති දෙකක් අතර මේ දත්ත පාවිච්චි වෙද්දි මේ පද්ධති දෙකට දත්ත තේරුම් ගන්න පුලුවන් වෙනඑක.මෙතනදි දත්ත හොරකම් කරන්න බැරි වෙන්න දත්ත වෙනස් කිරීමක් බලාපොරොත්තු වෙන්නේ නෑ..
encode කරපු දත්ත decode කරන්නත් පුලුවන් වෙන්නේ algorithm එකකට අනුව තමා..ඒත් encode කරන්නේ ප්රසිද්ද algorithm අනුව..ඉතින් algorithm එක දන්නවනම් ඕන කෙනෙක්ට මේ encoded data එකක් decode කරන්න පුලුවන් ලේසියෙන්ම
Encrypting
Encrypt කරනවා කියන්නේ cryptography කියන මාතෘකාවට අදාල දෙයක්.මේකෙදි වෙන්නේ දත්ත එක තැනක ඉදලා තව තැනකට සම්ප්රේෂනය කරද්දි හරි store කරල තියද්දි හරි කාටවත් හොරකම් කරන්න බැරි විදිහකට දත්ත වෙනස් කරන එක.
දැන් උදාහරනයකට හිතන්න
^#s!MF#:5_(A!R5-(X_
ඔන්න ඔය තියෙන්නේEncrypt කරපු string එකක්..පුලුවන්නම් try කරල බලන්න ඔය මොකක්ද කියලා කයලා හොයාගන්න...
දැන් ඔයාලට තේරෙනවා නේද මේ විදිහට Encrypt කරපු දත්තයක් කවුරු හරි හොරකම් කරාට වැඩක් නෑ..මොකද එයාට ඒක තේරුම් ගන්න බෑ..
එතකොට මේ විදිහට encrypt කරපු data හදුන්වනවා ciphertext කියලා..එතකොට encrypt නොකරපු data plaintext කියල හදුන්වනවා..
එතකොට මේ encrypt කරන්න අපි පාවිච්චි කරනවා key එකක්..දැන් ඔයාල බලනවා ඇති මොකක්ද මේ key කතාව කියල..
අපි කලින් ගත්ත උදාහරනයම ගමුකෝ..
මම අර විදිහට අඹ අරන් යද්දි කාට හරි පුලුවන් පෙට්ටි ටික හොරකම් කරල අඔ ගන්න..ඒ නිසා මම මේ පෙට්ටි වලට ඉබ්බෙක් දාලා වහනවා..දැන්මේ අඹ ගන්න පුලුවන් යතුර තියන කෙනාට විතරයිනේ නේද?
අන්න ඒ දේම තමා මේ encrypt සහ decrypt කරද්දි key එකෙන් වෙන්නේ.encrypt කරපු දෙයක් decrypt කරන්න පුලුවන් වෙන්නේ ගැලපෙන key එක තියනවනම් විතරයි..
මේ key එක පාවිච්චි කරන විදිහ අනුව encrypt කිරීම ප්රධාන කොටස් 2කට බෙදෙනවා..
Symmetric key encryption
Asymmetric cryptography (Public-key cryptography)
අපි data encrypt කරන්න පාවිච්චි කරන්නේ public key එක..මේ ciphertext එක ලබන කෙනා privet key එක පාවිච්චි කරල තමා decrypt කිරීම කරන්නේ..
උදාහරනයක් ගත්තොත් අමල් ට ඔන වෙනවා රහසිගත පනිවිඩයකි කමල්ට යවන්න..එයා කරන්නේ කමල්ගේ public key එක පාවිච්චි කරලා පනිවිඩය encrypt කරල කමල්ට යවනවා..
ඒත් මේ public key එකෙන් ආපහු decrypt කරන්න බෑ..කමල් එයා ලග තියන privet key එක පාවිච්චි කරලා මේ ciphertext එක plaintext එකකට decrypt කරගන්නවා..

දැන් ඔයාලට මතක් වෙනවා ඇති අද ගොඩක් වැදගත් වෙබ් අඩවි පාවිච්චි කරන SSL තාක්ෂනයේදි වෙන්නේත් මේ Public-key cryptography තාක්ෂනය තමයි..
හරි දැන් එහෙනම් මම දැන් පොඩි algorithm එකක් හදන්න තමා යන්නේ මේ encrypt සහ decrypt කරන්න..
මම මෙකට පාවිච්චි කරනවා Transposition cipher කියන ක්රමය සහ python language එක..
Transposition cipher කියන ක්රමයෙදි වෙන්නේ මේකයි..
දැන් අපි හිතමු plaintext එක - thisis
key එක - mymainkey
දැන් අපි මුලින්ම key එක අරගෙන ඒකේ එක පාරකට වඩා වැඩියෙන් තියන characters අයින් කරනවා..එතකොට
myainke
දැන් key එකේ length එක අනුව් alphabet එක කඩ කඩ ලියනවා..key එකේ තියන charcters අයේ ලියන්නේ නෑ
m y a i n k e
b c d f g h l
o p q r s t u
v w x y z
දැන් මම key එකේ අකාරාදීපිලිවෙලට උඩ ඉදන් පල්ලෙහට characters ටික ලියනවා.
a d q x e l u i f r y k h t m b o v n g s z y c p w
a b c d e f g h i j k l m n o p q r s t u v w x y z
ඔන්න දැන් යටින් ලිව්ව alphabet එකේ character වෙනුවට උඩ එකේ characters දාලා අපිට පුලුවන් ciphertext එක හදාගන්න..
nmhuhu
ඔන්න දැන් ඕක decode කරන්නනම් key එක තියෙන්නම ඔන..ඒත් මෙතනදි ඔය පාවිච්චි කරල තියෙන්නේ simple letters විතරනේ..ඉතින් ඔන්න මම ඔය method එකට හදපු python program එක download කරගන්නකෝ.
https://www.dropbox.com/s/rs9zrmf0uq1ype4/mycrypter.py?dl=0
ඔන්න තියනව මම කලින් කිව්ව ciphertext එක..මම ඒක crypt කරේ my#1key කියන key එකෙන්..
ඒ වගේම මෙකෙන් decrypt කරන්නත් පුලුවන්.
(මේ program එක වැඩිය test කරේ නැති නිසා සමහර විට bugs තියෙන්න පුලුවන්..)
ඒත් එක්කම hackerrank.com එකේ හොද challenge වගයක් තිබ්බ මේ cryptography ගැන..එ ටික කරොත් ඔයාලටත් හොද අවබෝධයක් ලැබෙයි..
https://www.hackerrank.com/domains/security/cryptography






