(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 veya
OPENSSL_DONT_ZERO_PAD_KEY
sabitlerinin bitsel birleşimi.
iy
null olmayan bir ilklendirme yöneyi.
etiketAEAD şifreleme kipi (GCM veya CCM) kullanıldığında gönderimli aktarılan kimlik kanıtlama etiketi.
kiml_kntlı_ek_veriKimlik kanıtlamasından geçmiş ek veri
etiket_uzunluğu
Kimlik kanıtlama etiketinin 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";
}
?>