(PHP 5 >= 5.3.0, PHP 7, PHP 8)
openssl_encrypt — Veriyi şifreler
$veri
,$yöntem
,$parola
,$seçenekler
= 0,$iy
= "",&$etiket
= null
,$kiml_kntlı_ek_veri
= "",$etiket_uzunluğu
= 16 Belirtilen veri
'yi belirtilen yöntem
ve parola
ile şifreler ve bir base64 kodlu dizge olarak veya ham bir dizge olarak döndürür.
veri
Şifrelenecek düz metin ileti verisi.
yöntem
Şifreleme yöntemi. Şifreleme yöntemlerinin listesi için bkz: openssl_get_cipher_methods()
parola
Parola. Beklenenden kısaysa null
ile dolgu yapılır, uzunsa kırpılır ve bunun için bir uyarı verilmez.
seçenekler
OPENSSL_RAW_DATA
ve OPENSSL_ZERO_PADDING
sabitlerinin bitsel birleşimi.
iy
null
olmayan bir ilklendirme yöneyi.
etiket
AEAD şifreleme kipi (GCM veya CCM) kullanıldığında gönderimli aktarılan kimlik kanıtlama etiketi.
kiml_kntlı_ek_veri
Kimlik kanıtlamasından geçmiş ek veri
etiket_uzunluğu
Kimlik kanıtlama etiket
inin uzunluğu. GCM kipinde değer 4-16 arasında olabilir.
İşlem başarısız olursa false
yoksa şifrelenmiş veri dizgesi döner.
yöntem
bağımsız değişkeni ile bilinmeyen bir şifreleme algoritması belirtilmişse E_WARNING
seviyesinde bir hata oluşur.
iy
bağımsız değişkeni üzerinden boş bir dizge aktarılırsa E_WARNING
seviyesinde bir hata oluşur.
Sürüm: | Açıklama |
---|---|
7.1.0 | etiket , ek_kiml_knt_verisi ve etiket_uzunluğu bağımsız değişkenleri eklendi. |
Örnek 1 - PHP 7.1+ için GCM kipinde AES Kimlik Kanıtlamalı Şifreleme örneği
<?php
// $key, daha önce openssl_random_pseudo_bytes gibi kriptografik olarak
// güvenilir bir yolla oluşturulmuş olmalıdır.
$plaintext = "şifrelenecek ileti";
$cipher = "aes-128-gcm";
if (in_array($cipher, openssl_get_cipher_methods()))
{
$ivlen = openssl_cipher_iv_length($cipher);
$iv = openssl_random_pseudo_bytes($ivlen);
$ciphertext = openssl_encrypt($plaintext, $cipher, $key, $options=0, $iv, $tag);
// Şifreyi daha sonra çözmek için $cipher, $iv ve $tag saklanacak
$original_plaintext = openssl_decrypt($ciphertext, $cipher, $key, $options=0, $iv, $tag);
echo $original_plaintext."\n";
}
?>
Örnek 2 - PHP 7.1 öncesi için GCM kipinde AES Kimlik Kanıtlamalı Şifreleme örneği
<?php
//$key evvelce openssl_random_pseudo_bytes gibi güvenli bir yolla üretilmiş olmalı
$plaintext = "şifrelenecek ileti";
$ivlen = openssl_cipher_iv_length($cipher="AES-128-CBC");
$iv = openssl_random_pseudo_bytes($ivlen);
$ciphertext_raw = openssl_encrypt($plaintext, $cipher, $key, $options=OPENSSL_RAW_DATA, $iv);
$hmac = hash_hmac('sha256', $ciphertext_raw, $key, $as_binary=true);
$ciphertext = base64_encode( $iv.$hmac.$ciphertext_raw );
// daha sonra şifreyi çözmek için....
$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);
$original_plaintext = openssl_decrypt($ciphertext_raw, $cipher, $key, $options=OPENSSL_RAW_DATA, $iv);
$calcmac = hash_hmac('sha256', $ciphertext_raw, $key, $as_binary=true);
if (hash_equals($hmac, $calcmac))// timing attack safe comparison
{
echo $original_plaintext."\n";
}
?>