Как я шифрую строку в PHP?

Если Вы имеете контроль над запросом, который возвращает результаты, можно использовать ISNULL () для возврата ненулевых значений как это:

SELECT 
  ISNULL(name,'') AS name
  ,ISNULL(age, 0) AS age
FROM 
  names

, Если Ваша ситуация может терпеть эти волшебные значения для заменения ПУСТОЙ УКАЗАТЕЛЬ, проявляя этот подход, может устранить проблему через целое приложение, не создавая помехи коду.

20
задан Peter Mortensen 21 August 2016 в 06:23
поделиться

2 ответа

Предупреждение системы безопасности: Шифрование без аутентификации уязвимо для так называемой атаки с выбранным зашифрованным текстом. См. ответ Юджина для решения, которое предлагает аутентифицированное шифрование.

Если вы используете 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 режимы шифрования.

23
ответ дан 29 November 2019 в 22:46
поделиться

Я не крипто-парень, но я использую такие вещи:

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);
}
5
ответ дан 29 November 2019 в 22:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: