Поиск зашифрованного текста в базе данных начинается с или включает строку - PullRequest
0 голосов
/ 24 января 2020

Я просто думаю о том, можно ли искать зашифрованные поля в базе данных, которые начинаются с или включают в себя некоторые символы или строки.

Пример:

Зашифрованный текст в БД: "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;
    }
}

1 Ответ

3 голосов
/ 24 января 2020

Если вы извлекли все значения, расшифровали их и отфильтровали впоследствии: без проблем, go для него.

Если вы хотите выгрузить все это в базу данных: забудьте об этом. Один из наиболее важных принципов правильного шифрования - это избегать , особенно этого параметра: если я сейчас использую некоторую часть открытого текста, зашифрую его и проверю другие части в базе данных, которые его содержат, или начнем с него. Просто попробуйте зашифровать строку char с помощью char, чтобы увидеть, как зашифрованная строка изменяется не только в крошечных битах, но и полностью.

Но вы можете попробовать следующее: если вы всегда хотите искать префикс заданного , постоянной длины (как в: всегда первые три, четыре символа строки), закодируйте это отдельно или ха sh и сохраните в отдельном столбце. Это позволило бы использовать этот столбец для фильтрации

...