#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. Нет, но я сделаю это сейчас, большое спасибо!