Image

Bilgi Veritabanı → PHP ile Metin Şifreleme ve Şifre Çözme Örneği

[Senaryolar]
Yayın tarihi: 10.10.2023

Aşağıda, openssl tabanlı metin şifreleme ve şifre çözme işlemi için PHP 8.1 üzerinde test edilmiş bir örnek betik bulunmaktadır.

nano encrypt-decrypt.php
<?php 

define('ENCRYPTION_KEY', '<mark>benim-gizli-anahtarim-2121</mark>');

// Şifreleme
$plaintext = "<output>PHP 8.1'de şifreleme için test metni</output>";
$ivlen = openssl_cipher_iv_length($cipher="AES-128-CBC");
$iv = openssl_random_pseudo_bytes($ivlen);
$ciphertext_raw = openssl_encrypt($plaintext, $cipher, ENCRYPTION_KEY, $options=OPENSSL_RAW_DATA, $iv);
$hmac = hash_hmac('sha256', $ciphertext_raw, ENCRYPTION_KEY, $as_binary=true);
$ciphertext = base64_encode($iv.$hmac.$ciphertext_raw);
<output>echo $ciphertext.'<br>';</output>
 
// Şifre Çözme
$c = base64_decode($ciphertext);
$ivlen = openssl_cipher_iv_length($cipher="AES-128-CBC");
$iv = substr($c, 0, $ivlen);
$hmac = substr($c, $ivlen, $sha2len=32);
$ciphertext_raw = substr($c, $ivlen+$sha2len);
$plaintext = openssl_decrypt($ciphertext_raw, $cipher, ENCRYPTION_KEY, $options=OPENSSL_RAW_DATA, $iv);
$calcmac = hash_hmac('sha256', $ciphertext_raw, ENCRYPTION_KEY, $as_binary=true);
if (hash_equals($hmac, $calcmac))
{
    <output>echo $plaintext;</output>
}

?>

İlk satırda şifrelenmiş metin, ikinci satırda ise çözülmüş metin görünür. Sayfayı aynı metinle yeniden yüklediğimizde, şifreleme sonucu her seferinde farklı olacak, ancak şifre çözme sonucunda orijinal metin aynı şekilde elde edilecektir.

Fonksiyonları farklı dosyalarda kullanmak istiyorsanız, ENCRYPTION_KEY parametresini ayrı bir dosyada tanımlamanız gerekecektir.





No Comments Yet