SoalShift_modul4_B12

Soal1

Untuk menyelesaikan soal nomor 1 maka saya menambahkan fungsi caesar(), encrypt, dan decrypt. Selain itu juga dilakukan perubahan pada fungsi readdir, read, dan getattr.

Fungsi caesar() saya gunakan untuk membuat array yang akan digunakan sebagai kunci dari Caesar Cipher. Berikut source code dari fungsi caesar():


char base[95]="qE1~ YMUR2\"`hNIdPzi%^t@(Ao:=CQ,nx4S[7mHFye#aT6+v)DfKL$r?bkOGB>}!9_wV']jcp5JZ&Xl|\\8s;g<{3.u*W-0";
char key[95];

void caesar()
{
    int shift=17, baselen = strlen(base), i, j;
    
    for(i=0, j=shift; j<baselen; j++, i++)
    {
        key[i] = base[j];
    }
    
    for(j=0; i<baselen; i++, j++)
    {
        key[i] = base[j];
    }
}
  • array base dan key digunakan untuk menyimpan kunci dari Caesar Cipher.
  • int shift=17, baselen = strlen(base), i, j; inisialisasi dan pemberian nilai pada variabel-variabel yang dibutuhkan.
  • Dua iterasi yang digunakan adalah untuk membentuk array kunci Caesar Cipher.

Fungsi decrypt() saya gunakan untuk men-decrypt nama file asli dan memunculkannya dalam bentuk yang bisa dibaca setelah folder shift4 di-mount. Berikut source code dari fungsi decrypt():


void decrypt(char kal[1000], char dec[1000])
{
    int i, j;
    for(i=0; i<strlen(kal); i++)
    {
        for(j=0; j<strlen(key); j++)
        {
            if(kal[i]==key[j])
            {
                dec[i]=base[j];
                break;
            }
        }
        if(j==strlen(base))
        {
            dec[i]=kal[i];
        }
    }
}
  • void decrypt(char kal[1000], char dec[1000]) deklarasi fungsi decrypt(). return-nya bertipe void (tidak me-return sesuatu) dan parameternya berupa dua buah array.
  • int i, j menginisialisasi variabel yang dibutuhkan.
  • iterasi digunakan untuk memeriksa tiap karakter dan memeriksa kuncinya. Bila karakter yang diperiksa tidak terdapat dalam string kunci, maka string tersebut tidak akan di-decrypt.

Fungsi encrypt() saya gunakan untuk men-encrypt nama file yang sudah ter-decrypt dan mengembalikannya dalam bentuk aslinya (agar saat getattr file/folder yang dimaksud dapat ditemukan). Berikut source code dari fungsi encrypt():

void encrypt(char kal[1000], char enc[1000])
{
    //Encrypt
    int i, j;
    for(i=0; i<strlen(kal); i++)
    {
        for(j=0; j<strlen(base); j++)
        {
            if(kal[i] == base[j])
            {
                enc[i]=key[j];
                break;
            }
        }
        if(j==strlen(base))
        {
            enc[i]=kal[i];
        }
    }
}
  • void encrypt(char kal[1000], char enc[1000]) deklarasi fungsi encrypt(). return-nya bertipe void (tidak me-return sesuatu) dan parameternya berupa dua buah array.
  • Fungsi encrypt() mirip seperti decrypt tetapi array pengecekannya dibalik.

Soal4