Я хочу расшифровать поля в моей базе данных, используя sql на mysql, но перед расшифровкой мне нужно проверить, можно ли расшифровать эти поля.AES_DECRYPT Как вы проверяете значение уже дешифровано в mysql
update customer
set name = aes_decrypt(from_base64(name), 'key')
Если предоставленный ключ неверен или данные недействительны, поле имени будет иметь значение null;
Я попытался добавить предложение where, как показано ниже, чтобы убедиться, что имя поля еще не дешифровано, но это не работает все время, поскольку aes_decrypt может возвращать null или мусор, если ключ неверен или данные недействительны.
update customer
set name = aes_decrypt(from_base64(name), 'key')
where aes_decrypt(from_base64(name), 'key') is not null.
Так как я могу проверить, является ли возвращаемое значение нулевым или «мусором»? Или какой другой подход существует?
Из mysql doc: «возможно, что AES_DECRYPT() возвращает значение, отличное от NULL (возможно, мусор), если входные данные или ключ недействительны».
мусора пример я получаю: ж Y'vYm_
Благодаря
Это несколько тауталогический, но если вы не знаете, как могут выглядеть дешифрованные данные, вы не будете знать, что это действительно так. Если незашифрованные данные были фактическими случайными значениями, то невозможно отличить два разных набора случайных данных. –
Есть что-то (словарь данных приложений), который вы можете проверить, чтобы узнать, зашифрован ли какой-то конкретный стол. Или программа (и программист) должна угадать? ; -/ –
Как вы не можете узнать, зашифровано ли поле и если да, то какой ключ? Это устанавливается при разработке db. Разумеется, вы не микшируете зашифрованные и не зашифрованные в одном поле – zaph