Почему это не расшифровывается?

#php #mysql #encryption #aes

#php #mysql #шифрование #aes

Вопрос:

Я пытался заставить это работать некоторое время. Итак, я пытаюсь создать API, и он использует POST-запросы (очевидно). Он должен расшифровываться на {"action":"initialize","application_id":"2ToERP8VaSfkfrpGTn37I75lZ9Q9ZRHIIU56w5GAZ8MWp"} . Но по какой-то причине этого не происходит. Здесь он расшифровывается нормально,

 function DecryptMessage($message, $program)
{
    $enckey = 'XXSAGalY532n3AfVM36ugBczzdtwkxC6Rai1so3ajf90yMZYfOr2'; //This is what the MySQL is for..
    $method = 'aes-256-cbc';
    $password = substr(hash('sha256', $enckey, true), 0, 32);
    $iv = chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0);
    $decrypted = openssl_decrypt(base64_decode($message), $method, $password, OPENSSL_RAW_DATA, $iv);
    return $decrypted;
}
$result = DecryptMessage('3dT6n4BVehzG1d3hO25aUIekEBP21zQnLe 0MgoLC6vBJldVAKLLl7eVYkztWaEDdboCvp6 T6ajApcdbCwucWU6sf94U9P4v4 0klGZ0 yCc/hLwn1Sxlfg9dlByuVy', '2ToERP8VaSfkfrpGTn37I75lZ9Q9ZRHIIU56w5GAZ8MWp');
 

Но когда я пытаюсь внедрить это в свой код. Он не расшифровывается.

 function decrypttest($message)
{
    $servername = ""; //host
    $username = ""; //username
    $password = ""; //password
    
    try {
      $conn = new PDO("mysql:host=$servername;dbname=ADataBase", $username, $password);
      $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch(PDOException $e) {
      echo 'Error';
      die();
    }
    $sql = "SELECT * FROM `programs` WHERE `authtoken` = '$program'";
    $result = $conn->query($sql);
    $row = $result->fetchAll(PDO::FETCH_COLUMN, 4);
    $encrypted = $message;
    $password = $row[0]; //This is the $enckey from example 1.
    $method = 'aes-256-cbc';
    $password = substr(hash('sha256', $password, true), 0, 32);
    $iv = chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0);
    $decrypted = openssl_decrypt(base64_decode($encrypted), $method, $password, OPENSSL_RAW_DATA, $iv);
    
    return $decrypted;
}
 

Комментарии:

1. Я забыл упомянуть, но я пытаюсь сказать, что он расшифровывается, когда есть ключ aes, но когда я пытаюсь расшифровать после получения ключа aes из mysql (что он делает успешно, я проверил). Он не расшифровывается, и я понятия не имею, почему.

2. Вы сравнили bin2hex($password) оба кода, где $password находится значение, которое передается непосредственно openssl_encrypt ?

3. Нет, но я сделаю это сейчас, большое спасибо!