Если Вы имеете контроль над запросом, который возвращает результаты, можно использовать ISNULL () для возврата ненулевых значений как это:
SELECT
ISNULL(name,'') AS name
,ISNULL(age, 0) AS age
FROM
names
, Если Ваша ситуация может терпеть эти волшебные значения для заменения ПУСТОЙ УКАЗАТЕЛЬ, проявляя этот подход, может устранить проблему через целое приложение, не создавая помехи коду.
Предупреждение системы безопасности: Шифрование без аутентификации уязвимо для так называемой атаки с выбранным зашифрованным текстом. См. ответ Юджина для решения, которое предлагает аутентифицированное шифрование.
Если вы используете PHP> = 5.3, новый openssl_encrypt
может вам помочь: он позволяет шифрование данных с использованием широкого диапазон методов шифрования.
Эти данные могут быть позже расшифрованы с помощью openssl_decrypt
, который, очевидно, делает прямо противоположное.
И если вы хотите знать, какие функции шифрования вы можете использовать, ] openssl_get_cipher_methods
будет полезен; -)
Кажется, их довольно много ^^
Вот фрагмент кода, который я опубликовал в своем блоге некоторое время назад, который должен продемонстрировать использование этих трех функций:
$methods = openssl_get_cipher_methods();
var_dump($methods);
$textToEncrypt = "he who doesn't do anything, doesn't go wrong -- Zeev Suraski";
$secretKey = "glop";
echo '<pre>';
foreach ($methods as $method) {
$encrypted = openssl_encrypt($textToEncrypt, $method, $secretKey);
$decrypted = openssl_decrypt($encrypted, $method, $secretKey);
echo $method . ': ' . $encrypted . ' ; ' . $decrypted . "\n";
}
echo '</pre>';
При написании этого я получил что-то вроде этого:
bf-ecb: /nyRYCzQPE1sunxSBclxXBd7p7gl1fUnE80gBCS1NM4s3wS1Eho6rFHOOR73V9UtnolYW+flbiCwIKa/DYh5CQ== ; he who doesn't do anything, doesn't go wrong -- Zeev Suraski
bf-ofb: M9wwf140zhwHo98k8sj2MEXdogqXEQ+TjN81pebs2tmhNOsfU3jvMy91MBM76dWM7GVjeh95p8oDybDt ; he who doesn't do anything, doesn't go wrong -- Zeev Suraski
cast5-cbc: xKgdC1y654PFYW1rIjdevu8MsQOegvJoZx0KmMwb8aCHFmznxIQVy1yvAWR3bZztvGCGrM84WkpbG33pZcxUiQ== ; he who doesn't do anything, doesn't go wrong -- Zeev Suraski
cast5-cfb: t8ABR9mPvocRikrX0Kblq2rUXHiVnA/OnjR/mDJDq8+/nn6Z9yfPbpcpRat0lYqfVAcwlypT4A4KNq4S ; he who doesn't do anything, doesn't go wrong -- Zeev Suraski
cast5-ecb: xKgdC1y654NIzRl9gJqbhYKtmJoXBoFpgLhwgdtPtYB7VZ1tRHLX0MjErtfREMJBAonp48zngSiTKlsKV0/WhQ== ; he who doesn't do anything, doesn't go wrong -- Zeev Suraski
cast5-ofb: t8ABR9mPvofCv9+AKTcRO4Q0doYlavn8zRzLvV3dZk0niO7l20KloA4nUll4VN1B5n89T/IuGh9piPte ; he who doesn't do anything, doesn't go wrong -- Zeev Suraski
des-cbc: WrCiOVPU1ipF+0trwXyVZ/6cxiNVft+TK2+vAP0E57b9smf9x/cZlQQ4531aDX778S3YJeP/5/YulADXoHT/+Q== ; he who doesn't do anything, doesn't go wrong -- Zeev Suraski
des-cfb: cDDlaifQN+hGOnGJ2xvGna7y8+qRxwQG+1DJBwQm/4abKgdZYUczC4+aOPGesZM1nKXjgoqB4+KTxGNo ; he who doesn't do anything, doesn't go wrong -- Zeev Suraski
И если вы не используете PHP 5.3, вы можете взглянуть на раздел руководства Mcrypt и такие функции, как mcrypt_encrypt
; - )
Это интерфейс к mcrypt библиотека, которая поддерживает широкий спектр блочных алгоритмов, таких как DES, TripleDES, Blowfish (по умолчанию), 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA, RC2 и ГОСТ в CBC, OFB, CFB и ECB режимы шифрования.
Я не крипто-парень, но я использую такие вещи:
function crypt($dataToEncrypt){
$appKey = '%39d15#13P0£df458asdc%/dfr_A!8792*dskjfzaesdfpopdfo45s4dqd8d4fsd+dfd4s"Z1';
$td = mcrypt_module_open(MCRYPT_SERPENT, '', MCRYPT_MODE_CBC, '');
// Creates IV and gets key size
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM);
$ks = mcrypt_enc_get_key_size($td);
// Creates key from application key
$key = substr($appKey, 0, $ks);
// Initialization
mcrypt_generic_init($td, $key, $iv);
// Crypt data
$encrypted = mcrypt_generic($td, $dataToEncrypt);
// Close
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return array($encrypted, $iv);
}
Для расшифровки строки вам понадобится ключ и вектор инициализации ( $ iv
).
function decrypt($encryptedData, $iv){
$appKey = '%39d15#13P0£df458asdc%/dfr_A!8792*dskjfzaesdfpopdfo45s4dqd8d4fsd+dfd4s"Z1';
$td = mcrypt_module_open(MCRYPT_SERPENT, '', MCRYPT_MODE_CBC, '');
// Gets key size
$ks = mcrypt_enc_get_key_size($td);
// Creates key from application key
$key = substr($appKey, 0, $ks);
// Initialization
mcrypt_generic_init($td, $key, $iv);
// Decrypt data
$decrypted = mdecrypt_generic($td, $encryptedData);
// Close
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return trim($decrypted);
}