Ketika kita menggunakan php, untuk keperluan enkripsi disediakan library mcrypt. Untuk bisa menggunakan library ini, kita harus mengubah setting di file php.ini Hilangkan semicolon (;) yang ada di depan baris yang ada mcryptnya yaitu:
mcrypt.algorithms_dir=/usr/local/lib/libmcrypt.
mcrypt.modes_dir=/usr/local/lib/libmcrypt
Setelah itu restart web server (apache)nya. Jika library mcrypt sudah diaktifkan, kita bisa mulai bermain kriptografi dengan menggunakan fungsi-fungsinya. Fungsi yang disediakan untuk enkripsi adalah:
mcrypt.algorithms_dir=/usr/local/lib/libmcrypt.
mcrypt.modes_dir=/usr/local/lib/libmcrypt
Setelah itu restart web server (apache)nya. Jika library mcrypt sudah diaktifkan, kita bisa mulai bermain kriptografi dengan menggunakan fungsi-fungsinya. Fungsi yang disediakan untuk enkripsi adalah:
chipertext = mcrypt_encrypt(ALGORITMA, key, plaintext, MODE, iv)
Sedangkan untuk mendapatkan teks asli disediakan fungsi:
plaintext = mcrypt_decrypt(ALGORITMA, key, chipertext, MODE, iv)
Pilihan ALGORITMA:
MCRYPT_3DES
MCRYPT_ARCFOUR
MCRYPT_BLOWFISH
MCRYPT_CAST_128
MCRYPT_CAST_256
MCRYPT_DES
MCRYPT_ENIGMA
MCRYPT_GOST
MCRYPT_IDEA
MCRYPT_LOKI_97
MCRYPT_MARS
MCRYPT_RIJNDAEL_128
MCRYPT_RIJNDAEL_192
MCRYPT_RIJNDAEL_256
MCRYPT_RC2
MCRYPT_RC6
MCRYPT_SAFERPLUS
MCRYPT_SERPENT
MCRYPT_TWOFISH
MCRYPT_WAKE
MCRYPT_XTEA
Pilihan MODE:
MCRYPT_MODE_ECB
MCRYPT_MODE_CTR
MCRYPT_MODE_CBC
MCRYPT_MODE_CFB
MCRYPT_MODE_NCFB
MCRYPT_MODE_OFB
MCRYPT_MODE_NOFB
MCRYPT_MODE_STREAM
Dengan adanya 4 parameter selain plaintext saja sebenarnya metode yang digunakan fungsi ini menjadi sulit ditebak. Ditambah kita bisa mengkombinasinya dengan fungsi enkripsi lain seperti base64_encode. Nah, kita juga bisa mengamankan key dan iv dengan menggunakan fungsi-fungsi hashing seperti md5.
Berikut akan disajikan contoh yang bisa diperbuat programmer dalam dunia kriptografi dengan fitur yang disediakan php ini.
$input = "SmackFactory";
$encrypted = encryptIt( $input );
$decrypted = decryptIt( $encrypted );
echo '<br />' .$encrypted . '<br />' . $decrypted;
$encrypted = base64_encode( $input );
$decrypted = base64_decode( $encrypted );
echo '<br />' .$encrypted . '<br />' . $decrypted.'<br />';
$encrypted = urlencode( "hello world!@#$%^&*()_+");
$decrypted = urldecode( $encrypted );
echo '<br />urlencode : ' .$encrypted . '<br />urldecode : ' . $decrypted.'<br />';
function encryptIt( $q ) {
$cryptKey = 'qJB0rGtIn5UB1xG03efyCp';
$qEncoded = base64_encode( mcrypt_encrypt( MCRYPT_RIJNDAEL_256, md5( $cryptKey ), $q, MCRYPT_MODE_CBC, md5( md5( $cryptKey ) ) ) );
return( $qEncoded );
}
function decryptIt( $q ) {
$cryptKey = 'qJB0rGtIn5UB1xG03efyCp';
$qDecoded = rtrim( mcrypt_decrypt( MCRYPT_RIJNDAEL_256, md5( $cryptKey ), base64_decode( $q ), MCRYPT_MODE_CBC, md5( md5( $cryptKey ) ) ), "\0");
return( $qDecoded );
}
?>
Contoh lain kombinasi yang bisa dibuat dalam proses enkripsi:
<?php
$key = pack('H*', "bcb04b7e103a0cd8b54763051cef08bc55abe029fdebae5e1d417e2ffb2a00a3");
# show key size use either 16, 24 or 32 byte keys for AES-128, 192
# and 256 respectively
$key_size = strlen($key);
echo "Key size: " . $key_size . "\n";
$plaintext = "This string was AES-256 / CBC / ZeroBytePadding encrypted.";
# create a random IV(Initialisation Vector) to use with CBC encoding
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
# creates a cipher text compatible with AES (Rijndael block size = 128)
# to keep the text confidential
# only suitable for encoded input that never ends with value 00h
# (because of default zero padding)
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $plaintext, MCRYPT_MODE_CBC, $iv);
# prepend the IV for it to be available for decryption
$ciphertext = $iv . $ciphertext;
# encode the resulting cipher text so it can be represented by a string
$ciphertext_base64 = base64_encode($ciphertext);
echo $ciphertext_base64 . "\n";
# === WARNING ===
# Resulting cipher text has no integrity or authenticity added
# and is not protected against padding oracle attacks.
# --- DECRYPTION ---
$ciphertext_dec = base64_decode($ciphertext_base64);
# retrieves the IV, iv_size should be created using mcrypt_get_iv_size()
$iv_dec = substr($ciphertext_dec, 0, $iv_size);
# retrieves the cipher text (everything except the $iv_size in the front)
$ciphertext_dec = substr($ciphertext_dec, $iv_size);
# may remove 00h valued characters from end of plain text
$plaintext_dec = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $ciphertext_dec, MCRYPT_MODE_CBC, $iv_dec);
echo $plaintext_dec . "\n";
?>
Tidak ada komentar:
Posting Komentar