Sunday, March 10, 2013

Perl simple crypt (caesar cipher)

Dalam berkomunikasi dari jaman dulu hingga saat ini pada suatu ketika dibutuhkan sebuah keamanan untuk menjamin terjaganya kerahasiaan informasi yang disampaikan dari tempat pengiriman hingga tempat tujuan, sehingga informasi yang dikirimkan ini tidak terbaca oleh pihak ketiga. Keamanan yang saya maksud di sini adalah adanya sebuah penyandian atau enkripsi (istilah kerennya) dari kata-kata yang dikirimkan untuk memastikan bahwa orang yang mempunyai kata kunci saja yang bisa membaca informasi tersebut. Teknik enkripsi paling sederhana dalam kriptografi adalah buatan julius caesar yang dikenal sampai saat ini dengan sebutan caesar cipher. Algoritma dalam pembentukan sandi dalam teknik ini yaitu dengan menggeser karakter. Misal A menjadi B, B menjadi C, C menjadi D dan seterusnya. Untuk mengetahui lebih lanjut tentang algoritma caesar cipher bisa dibaca di wikipedia

Programming time... 
Saya telah membuat program perl dengan metode caesar cipher yang akan mengenkripsi plaintext ke ciphertext maupun mendekripsikan dari ciphertext ke plaintext.

#!/usr/bin/perl
# Perl simple crypt
# Caesar cipher
# zam
# 10/03/2013

use strict;

sub __h{
    print "---\n";
    print "Usage : \n";
    print "Encrypt : perl crypt.pl 1 PlainTextNoSpaceOrUseDoubleQuotes key filename.ext\n";
    print "Decrypt : perl crypt.pl 2 key filename.ext\n";
    print "---\n";
}

sub __r{
    open(__F, "<".$_[0]);
    my $___r = <__f>;
    close(__F);
    return $___r;
}

sub __s{
    open(__F, ">".$_[1]);
    print __F $_[0];
    close(__F);
}

sub __d{
    my $__t = __r($_[1]);
    my @___t = unpack("C*", $__t);
    my $_t = "";
    foreach my $____t (@___t){
        $_t .= chr(abs($____t - ($_[0] % 130)) % 256);
    }
    print "---\n";
    print "Your info : ".$_t."\n";
    print "---\n";
}

sub __e{
    my @___t = unpack("C*", $_[0]);
    my $_t = "";
    foreach my $____t (@___t){
        $_t .= chr(abs($____t + ($_[1] % 130)) % 256);
    }
    __s($_t, $_[2]);
}

if($ARGV[0]){
    if($ARGV[0] eq "1"){
        if($ARGV[1] && $ARGV[2] && $ARGV[3]){
            __e($ARGV[1], $ARGV[2], $ARGV[3]);
        }else{
            __h();
        }
    }else{
        if($ARGV[1] && $ARGV[2]){
            __d($ARGV[1], $ARGV[2]);
        }else{
            __h();
        }
    }
}else{
    __h();
}

Berikut ini contoh eksekusi program di atas :


Enkripsi di atas sangat lemah namun bisa diperkuat dengan menambahkan beberapa metode enkripsi yang lain.
Semangat buat yang sedang mengerjakan kriptografi :D.