2016-03-31 27 views
1

Şifremi mcrypt'den openssl'e taşımaya çalıştım ancak şifre çözme başarısız oluyor. Aşağıdaki kod şifreleme işlevimi gösterir. Şifre çözme işleminde, şifreleme işlevinde var_dump'ı yerleştirdim.openssl_decrypt her zaman false değerini döndürür

ben kodu aşağıdaki değişiklikleri çalıştı, hiçbiri çalıştı:

    sadece
  • olarak ayarlanmış seçenekleri ile tüm bu varyantlar merakı base64_encode($encrypted) üzerinden
  • base64_decode($encrypted)
  • : 0 (varsayılan değer), OPENSSL_RAW_DATA,

OPENSSL_ZERO_PADDING 210
function encryptString($data){ 
    $key = "1A534"; 

    do{ 
     $iv = random_bytes(100); 
    }while(strpos($iv,"|Z|")!==false); 

    $encrypted = openssl_encrypt($data,"aes-256-gcm",$key,false,$iv); 
    var_dump(openssl_decrypt($encrypted,"aes-256-gcm",$key,OPENSSL_RAW_DATA,$iv)); 
    $output = $iv . "|Z|" . $encrypted; 
    $output = base64_encode($output); 
    return $output; 
} 

PHP Sürümü olduğunu 7.0.5-1 + deb.sury.org ~ güvenilir + 1

OpenSSL Sürüm OpenSSL 1.0.2g 1 Mar 2016

Neden yanlış dönen openssl_decrypt tutar mı? Sadece yukarıdaki satırdaki aynı değişkenlerle başarıyla şifrelendim.

+1

Kimlik doğrulama etiketi ile ilgili bir hata olduğundan, bunun PHP 7.1'e kadar çalışmayacağını düşünüyorum. –

+0

Doğru görünüyor. Hiçbiri GCM şifreleri doğru çalışmıyor. – Us3r

+0

Bu senaryoda 7.1 kullanıyorum, ancak yine de tüm senaryolarda yanlış bir getiri alıyorum. – Dockstar

cevap

0

AEAD desteklenmediğinden, PHP < 7.1 için çalışmayacaktır.

the library I created'u (PHP 5.4+ ve 7.0+) kullanabilirsiniz.

ortamınıza bağlı olarak, test etmek ve aşağıdaki yöntemleri kullanacağız: - OpenSSL PHP 7.1, üzerine - libCrypto extension, - Saf bir PHP uygulaması.

Saf PHP yönteminin diğer yöntemlere göre çok yavaş olduğunu unutmayın.

İlgili konular