Я пытаюсь передать зашифрованные данные через цикл while, чтобы расшифровать данные из базы данных. Я могу получить какой-то результат. Хотя, поскольку дешифровка зависит от того, соответствует ли строка ключу. Если ключ не совпадает, он ничего не отображает, потому что все строки объединяются, а не разбиваются на каждую строку таблицы.While Loop зашифрованные данные
Что я вижу случиться:
Если зашифрованы данные линии 1:
Если зашифрованы данные линии 2:
+-------------------+
| client_name |
+-------------------+
| 1234 |
| 5678 |
+-------------------+
Результат с циклом while: . То, что я пытаюсь достичь, заключается в том, что цикл while переходит в линию и выводит для расшифровки.
Вот что я для выхода во время цикла:
<?php
$data = mysql_query("SELECT * FROM invoices WHERE username = '$username'") or die(mysql_error());
while($info = mysql_fetch_array($data))
{
$security = new Security();
echo "<a href='#' class='list-group-item'>".$security->decrypt($info['client_name'])." <span class='label label-default pull-right'>Invoice 20</span></a>";
}
?>
Вот что у меня есть для дешифровки: (На основании - http://wpy.me/blog/15-encrypt-and-decrypt-data-in-php-using-aes-256)
<?php class Security {
# Private key
public static $salt = 'ZfTfbipGsZ4yz34jFrGHagahptzLN7ROigy';
# Encrypt a value using AES-256.
public static function encrypt($plain, $key = null, $hmacSalt = null) {
if(empty($key)) {
$key = self::$salt;
}
self::_checkKey($key, 'encrypt()');
if ($hmacSalt === null) {
$hmacSalt = self::$salt;
}
$key = substr(hash('sha256', $key . $hmacSalt), 0, 32); # Generate the encryption and hmac key
$algorithm = MCRYPT_RIJNDAEL_128; # encryption algorithm
$mode = MCRYPT_MODE_CBC; # encryption mode
$ivSize = mcrypt_get_iv_size($algorithm, $mode); # Returns the size of the IV belonging to a specific cipher/mode combination
$iv = mcrypt_create_iv($ivSize, MCRYPT_DEV_URANDOM); # Creates an initialization vector (IV) from a random source
$ciphertext = $iv . mcrypt_encrypt($algorithm, $key, $plain, $mode, $iv); # Encrypts plaintext with given parameters
$hmac = hash_hmac('sha256', $ciphertext, $key); # Generate a keyed hash value using the HMAC method
return $hmac . $ciphertext;
}
# Check key
protected static function _checkKey($key, $method) {
if (strlen($key) < 32) {
echo "Invalid key $key, key must be at least 256 bits (32 bytes) long."; die();
}
}
# Decrypt a value using AES-256.
public static function decrypt($cipher, $key = null, $hmacSalt = null) {
if(empty($key)) {
$key = self::$salt;
}
self::_checkKey($key, 'decrypt()');
if (empty($cipher)) {
echo 'The data to decrypt cannot be empty.'; die();
}
if ($hmacSalt === null) {
$hmacSalt = self::$salt;
}
$key = substr(hash('sha256', $key . $hmacSalt), 0, 32); # Generate the encryption and hmac key.
# Split out hmac for comparison
$macSize = 64;
$hmac = substr($cipher, 0, $macSize);
$cipher = substr($cipher, $macSize);
$compareHmac = hash_hmac('sha256', $cipher, $key);
if ($hmac !== $compareHmac) {
return false;
}
$algorithm = MCRYPT_RIJNDAEL_128; # encryption algorithm
$mode = MCRYPT_MODE_CBC; # encryption mode
$ivSize = mcrypt_get_iv_size($algorithm, $mode); # Returns the size of the IV belonging to a specific cipher/mode combination
$iv = substr($cipher, 0, $ivSize);
$cipher = substr($cipher, $ivSize);
$plain = mcrypt_decrypt($algorithm, $key, $cipher, $mode, $iv);
return rtrim($plain, "\0");
}
}
?>
Что бы вы посоветовали мне делать в моем цикле while для вывода каждой точки данных отдельно?
Я не получить эту проблему? Сейчас идет линия для линии. Это просто «эхо», которое перекликается с ним на одной линии. Добавьте '
' для каждой итерации? И вы должны поместить экземпляр класса Security перед циклом while. –
Я думаю, ваша проблема в том, что вы не получаете вывод на отдельных строках, но я не уверен. Возможно, у вас проблемы с расшифровкой, так как выглядит так же, как и вход. Если все, что вам нужно, это отдельные строки, возможно, добавление «эха»
«'поможет? –в коде, который вы пытаетесь расшифровать с помощью 128-битного алгоритма. YET вы проверяете длину ключа в 256 бит .... не вычисляет, ваш код никогда не будет работать правильно. Вообще. – specializt