28 Jun 2010 @ 5:26 AM 

Dikutip dari note di Facebook. Link aslinya di http://www.facebook.com/note.php?note_id=124045347607271


Bangsa Yahudi adalah salah satu bangsa yang menguasai dunia karena kecerdasan dan kelicikannya baik dari segi sains, bisnis, maupun teknologi.

Allah Ta’ala memang telah menganugrahkan kepada bangsa Yahudi suatu kelebihan berupa otak yang cemerlang. Dan sungguh sangat menarik mengetahui kenapa orang Yahudi begitu pintar dan mempunyai kelebihan dibanding bangsa-bangsa lain di atas dunia ini. Tentu saja dalam hal ini hanyalah sebatas kelebihan dalam hal urusan keduniawian…

“dan Facebook yang sedang kita gunakan ini pun adalah hasil karya mereka”…

Berikut ini sebuah artikel yang akan memaparkan sedikit sebab dari fenomena kelebihan mereka ini. More »

Tags Categories: Opini, Pembahasan Posted By: Penguin
Last Edit: 28 Jun 2010 @ 05 27 AM

EmailPermalinkComments (0)
 16 Sep 2008 @ 12:11 AM 

Nah, berhubung ternyata gak ada yang ngebahas soal gw, gw jadi terdorong untuk ngebahas soal gw sendiri yang tentang kriptografi. Positif thinking aja, mungkin anak-anak osn kompi lain lagi sibuk menghadapi nasib… eh, pelatnas.

Kenapa gw bahas soal ini di blog gw sendiri dan bukannya di blog osn kompi? Yah, alasannya sederhana aja, gw cuma mau mempromosikan blog gw ini. Jadi jangan marah yaaa…

Oke, kita mulai pembahasan ini dengan melihat contoh testcase kita:
Input:
agung
keren
agung
cool
agung utama
ganteng

Output:
KKLRT
CUIYI
GGHGK ATNFE

Algoritma kriptografi ini (yang notabane disebut “Vigenere Chiper”winking untuk dipemograman sebenatnya sederhana:
1. Input plain text.
2. Input sandi.
3. Rubah huruf pertama plain text dengan huruf pertama sandi sesuai tabel.
4. Kalau bertemu spasi, jangan di proses, dan sandi dimulai lagi dari huruf pertama.
5. Kalau sudah sampai ke huruf akhir sandi, kembalikan ke huruf pertama sandi.
Baca soal lagi kalau tidak mengerti dengan algoritmanya.

Gak sulit kan? Tapi yang terlihat ternyata tidak semudah kelihatannya. Coba lihat lagi poin ke 3. Kita diminta mencocokan dengan tabel. Sekedar cerita, dulu gw bikin kodenya pakai array 2 dimensi, jadi keluaran sandi[huruf plain, huruf sandi] adalah hasilnya. Cara ini bisa dibuat untuk enkripsi, tapi gimana dengan dekripsi? Silahkan coba sendiri.

Kalau pakai array juga memakan memori banyak. Satu variabel char sudah 1 byte. Kalau ada 26 huruf berarti ada 26 X 26 variabel char (676 variabel). Kelihatannya sedikit, tapi tidak efektif. Jadi marilah kita tinggalkan cara ini.

Coba perhatikan tabel kriptografi ini. Kalau diperhatikan, sebenarnya chiper text merupakan hasil increment dari plain text. contoh: ‘A’ dengan sandi ‘A’ menghasilkan ‘A’ lagi. ‘A’ dengan sandi ‘B’ menghasilkan ‘B’. Kalau ‘F’ dengan sandi ‘L’ akan menghasilkan ‘Q’ (huruf ‘F’ naik sebanyak ‘L’ – 1 kali).

Sekarang, dalam pascal kita bisa tulis:
////////////////////////////////////////////////////////
var
input : string; //variabel untuk plain text
sandi : string; //variabel untuk sandi
i,j,k : byte; //variabel untuk (i)iterasi, (j)panjang sandi, dan (k)hurufsandi

begin
repeat //untuk perulangan

readln(input); //input plain
if input = ” then exit; //kalau kosong, selesai

readln(sandi); //input sandi

j := length(sandi); //simpan panjang sandi
input := upcase(input); //jadikan input huruf besar
sandi := upcase(sandi); //jadikan sandi huruf besar
k := 1; //simpan huruf ke berapa sandi akan dipakai

for i := 1 to length(input) do
begin
if input[i] = ‘ ‘ then begin k := 1; continue; end;
//kalau huruf spasi, jangan diproses
input[i] := chr( ord(input[i]) + ord(sandi[k]) – 65 );
//huruf input dinaikan sebanyak huruf sandi dikurangi 65(ASCII dari ‘A’winking
if ord(input[i]) > ord(‘Z’winking then
input[i] := chr( ord(input[i]) – 26 );
//Kalau lebih dari Z maka kurangi 26 huruf
k := k + 1;
//Gunakan huruf sandi berikutnya
if k > j then k := 1;
//Kalau lebih panjang dari sandi itu sendiri, kembalikan ke huruf pertama
end;

writeln(input); //cetak hasilnya

until input = ”;

end.
////////////////////////////////////////////////////////

Dari logika tadi, maka untuk mendekrip bisa kita rubah sedikit kodenya. Dimana setiap simbol dibalik.
////////////////////////////////////////////////////////
var
input : string; //variabel untuk plain text
sandi : string; //variabel untuk sandi
i,j,k : byte; //variabel untuk (i)iterasi, (j)panjang sandi, dan (k)hurufsandi

begin
repeat //untuk perulangan

readln(input); //input plain
if input = ” then exit; //kalau kosong, selesai

readln(sandi); //input sandi

j := length(sandi); //simpan panjang sandi
input := upcase(input); //jadikan input huruf besar
sandi := upcase(sandi); //jadikan sandi huruf besar
k := 1; //simpan huruf ke berapa sandi akan dipakai

for i := 1 to length(input) do
begin
if input[i] = ‘ ‘ then begin k := 1; continue; end;
//kalau huruf spasi, jangan diproses
input[i] := chr( ord(input[i]) – ord(sandi[k]) + 65 );
//huruf input diturunkan sebanyak huruf sandi ditambah 65(ASCII dari ‘A’winking
if ord(input[i]) <> j then k := 1;
//Kalau lebih panjang dari sandi itu sendiri, kembalikan ke huruf pertama
end;

writeln(input); //cetak hasilnya

until input = ”;

end.
////////////////////////////////////////////////////////

Sebenarnya untuk tugas yang sekarang kode ini sudah cukup, karena testcase sudah pasti tidak memiliki karakter lain selain alphabet dan spasi. Tapi sebenarnya dalam Vigenere Chiper, ada kemungkinan kalau input memiliki karakter khusus (seperti “‘!@#$%^&* dll). Maka, ada baiknya kita melakukan pengecualian proses untuk karakter-karakter tersebut. Kalau gw lebih suka pakai tipe set.
var
…..
himp : Set of char;
…..

jadi kode enkrip:
////////////////////////////////////////////////////////
var
input : string; //variabel untuk plain text
sandi : string; //variabel untuk sandi
i,j,k : byte; //variabel untuk (i)iterasi, (j)panjang sandi, dan (k)hurufsandi
himp : Set of char //variabel himpunan karakter yang diizinkan

begin
repeat //untuk perulangan

readln(input); //input plain
if input = ” then exit; //kalau kosong, selesai

readln(sandi); //input sandi

j := length(sandi); //simpan panjang sandi
input := upcase(input); //jadikan input huruf besar
sandi := upcase(sandi); //jadikan sandi huruf besar
himp := ['A'..'Z']; //krakter yang diizinkan dari A sampai Z
k := 1; //simpan huruf ke berapa sandi akan dipakai

for i := 1 to length(input) do
begin
if input[i] = ‘ ‘ then begin k := 1; continue; end;
//kalau huruf spasi, jangan diproses
if not(input[i] in himp) then continue;
//kalau tidak termasuk huruf yang diizinkan, jangan diproses
input[i] := chr( ord(input[i]) + ord(sandi[k]) – 65 );
//huruf input dinaikan sebanyak huruf sandi dikurangi 65(ASCII dari ‘A’winking
if ord(input[i]) > ord(‘Z’winking then
input[i] := chr( ord(input[i]) – 26 );
//Kalau lebih dari Z maka kurangi 26 huruf
k := k + 1;
//Gunakan huruf sandi berikutnya
if k > j then k := 1;
//Kalau lebih panjang dari sandi itu sendiri, kembalikan ke huruf pertama
end;

writeln(input); //cetak hasilnya

until input = ”;

end.
////////////////////////////////////////////////////////

dan dekrip:
////////////////////////////////////////////////////////
var
input : string; //variabel untuk plain text
sandi : string; //variabel untuk sandi
i,j,k : byte; //variabel untuk (i)iterasi, (j)panjang sandi, dan (k)hurufsandi
himp : Set of char //variabel himpunan karakter yang diizinkan

begin
repeat //untuk perulangan

readln(input); //input plain
if input = ” then exit; //kalau kosong, selesai

readln(sandi); //input sandi

j := length(sandi); //simpan panjang sandi
input := upcase(input); //jadikan input huruf besar
sandi := upcase(sandi); //jadikan sandi huruf besar
himp := ['A'..'Z']; //krakter yang diizinkan dari A sampai Z
k := 1; //simpan huruf ke berapa sandi akan dipakai

for i := 1 to length(input) do
begin
if input[i] = ‘ ‘ then begin k := 1; continue; end;
//kalau huruf spasi, jangan diproses
if not(input[i] in himp) then continue;
//kalau tidak termasuk huruf yang diizinkan, jangan diproses
input[i] := chr( ord(input[i]) – ord(sandi[k]) + 65 );
//huruf input diturunkan sebanyak huruf sandi ditambah 65(ASCII dari ‘A’winking
if ord(input[i]) <> j then k := 1;
//Kalau lebih panjang dari sandi itu sendiri, kembalikan ke huruf pertama
end;

writeln(input); //cetak hasilnya

until input = ”;

end.
////////////////////////////////////////////////////////
Sekarang, kita sudah benar-benar selesai dengan Vigenere Chiper.

Yah, pambahasan ini masih banyak kelemahannya. Pertama, mungkin kurang jelas. Kedua, gw terlalu ganteng (gak nyambung, oon!). Gw menerima segala kritik, saran, dan pujian dari siapa saja (siapa yang mau muji?). Terima Kasih atas perhatiannya, semoga anda yang memperhatikan selalu berbahagia dan yang tidak memperhatikan selalu sengsara (??).

Pembahasan tentang IP converting masih di proses.

Tags Categories: Pembahasan, Programming Posted By: Penguin
Last Edit: 16 Sep 2008 @ 12 11 AM

EmailPermalinkComments (0)
\/ More Options ...
  • Users » 1
  • Posts/Pages » 41
  • Comments » 36
Change Theme...
  • VoidVoid « Default
  • LifeLife
  • EarthEarth
  • WindWind
  • WaterWater
  • FireFire
  • LightLight

Petunjuk



    No Child Pages.

Penguin?



    No Child Pages.