Я просто думаю о том, можно ли искать зашифрованные поля в базе данных, которые начинаются с или включают в себя некоторые символы или строки.
Пример:
Зашифрованный текст в БД: "7724bd4ae7cba2c8d182980c7889258b07be344a9c8892de3c303ae03677771 c"
Дешифрованный текст: "Джеки"
Поиск всех зашифрованных полей в БД, который начинается с "J", который начинается с 1011 *
Использование натрия для шифрования / дешифрования значений с фиксированным одноразовым номером (используется в примере)
<?php
define("VALUE_ENCRYPTION_KEY", hex2bin("01abff4e1bbb9104e8e053bcc0492ad114ee7cbdc8597e4e5296e86c44a66bf0"));
define("VALUE_ENCRYPTION_NONCE", hex2bin('c1126da4358e7e4173f2ccc621dd1801a5949ae9f1896e43'));
define("VALUE_ENCRYPTION_BLOCK_SIZE", 16);
function EncryptValue($value)
{
if (!empty($value)) {
$padded_value = sodium_pad($value, VALUE_ENCRYPTION_BLOCK_SIZE);
$encrypted_value = sodium_crypto_secretbox($padded_value, VALUE_ENCRYPTION_NONCE, VALUE_ENCRYPTION_KEY);
return bin2hex($encrypted_value);
} else {
return null;
}
}
function DecryptValue($value)
{
if (!empty($value)) {
$decrypted_padded_value = sodium_crypto_secretbox_open(hex2bin($value), VALUE_ENCRYPTION_NONCE, VALUE_ENCRYPTION_KEY);
$decrypted_value = sodium_unpad($decrypted_padded_value, VALUE_ENCRYPTION_BLOCK_SIZE);
return $decrypted_value;
} else {
return null;
}
}