openssl_decrypt изображения не отображаются - PullRequest
0 голосов
/ 22 мая 2018

У меня есть форма, где после вставки их в базу данных.Я шифрую изображения, используя open ssl, а затем сохраняю их в базе данных.

Я также дешифрую и отображаю их.Изображения не отображаются после того, как они были извлечены из базы данных и затем расшифрованы.

Я не могу понять, почему изображения не отображаются.Из того, что я вижу, они правильно вставляются в базу данных

  <?php

if(isset($_POST["action"]))
{
 $connect = mysqli_connect("","","","");


  $cipher = "aes-128-cbc";
        $ivlen = openssl_cipher_iv_length($cipher);

        $key = openssl_random_pseudo_bytes(128);


 if($_POST["action"] == "fetch")
 {
  $query = "SELECT * FROM tbl_images where r_id = '".$_POST["r_id"]."' ORDER BY id DESC";
  $result = mysqli_query($connect, $query);

  $output = '
   <table class="table table-bordered table-striped">  
    <tr>
     <th width="10%">ID</th>
     <th width="70%">Image</th>
     <th width="10%">Remove</th>
    </tr>
  ';
  while($row = mysqli_fetch_array($result))
  {

      $newciphertext = $row["name"];
$newiv = $row["iv"];


 $img = openssl_decrypt($newciphertext, $cipher, $key, $options=0, $newiv);

   $output .= '
    <tr>
     <td>'.$row["id"].'</td>
     <td>
      <a target="_blank" href="#" onClick="enlarge(this)""><img src="data:image/jpeg;base64,'.base64_encode($img).'" class="img-thumbnail"/></a>
     </td>
     <td><button type="button" name="delete" class="btn btn-danger bt-xs delete" id="'.$row["id"].'">Remove</button></td>
    </tr>
   ';
  }
  $output .= '</table>';
  echo $output;
 }

 if($_POST["action"] == "insert")
 {

  $file = file_get_contents($_FILES["image"]["tmp_name"]);

$iv = openssl_random_pseudo_bytes($ivlen);
        $ciphertext = openssl_encrypt($file, $cipher, $key, $options=0, $iv);

  $query = "INSERT INTO tbl_images(name, r_id, iv) VALUES ('\"" . addslashes($ciphertext) ."\"', '".$_POST["r_id"]."', '$iv')";
  if(mysqli_query($connect, $query))
  {
   echo 'Image Inserted into Database';
  }
 }
 if($_POST["action"] == "delete")
 {
  $query = "DELETE FROM tbl_images WHERE id = '".$_POST["image_id"]."'";
  if(mysqli_query($connect, $query))
  {
   echo 'Image Deleted from Database';
  }
 }
}
?>

1 Ответ

0 голосов
/ 22 мая 2018

Каждый раз, когда вы получаете доступ к этой странице, вычисляется новый $iv, что хорошо для части шифрования, но вам требуется тот же $iv для расшифровки изображения.Поэтому, когда вы пытаетесь расшифровать изображение, вы получаете неправильный $iv, и расшифровка не выполняется.Вам следует сохранить $iv в вашей базе данных либо в новом поле, либо в сочетании с зашифрованным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...