Есть ли способ зашифровать только те данные, которые еще не зашифрованы? - PullRequest
0 голосов
/ 13 сентября 2018

Есть ли способ шифрования только тех данных, которые еще не зашифрованы? (Есть ли способ отличить зашифрованные и незашифрованные данные?)

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

Код для шифрования

update usersExample3 set password=aes_encrypt(password,'1234');

У меня есть хранимая процедура, которую я должен исправить, но не знаю, как:

DELIMITER //

CREATE PROCEDURE de ()
LANGUAGE SQL
DETERMINISTIC
SQL SECURITY DEFINER
COMMENT 'A procedure'
BEGIN
 while(there is any not encrypted data in the table)
  --if(usersExample3.password is not encrypted yet)
       update usersExample3 set password=aes_decrypt(password,'1234');
  --else (do nothing)
END//

;

Пример моей базы данных:

select * from usersExample3 where userId<=5;


userId  username    password            salt
1       Tom         Password1234        NULL
4       bdfg        θ¨¾jj;öN/yë‘   bcv
5       test        test                test

Так что здесь я хочу обновить все данные, которые еще не зашифрованы (в данном примере это userId 1 и 5. проблема в том, что все добавляют данные в базу данных, поэтому, когда данные сохраняются в таблице, у меня есть триггер (после вставки), который вызывает эту хранимую процедуру для автоматического шифрования новых данных. Спасибо

1 Ответ

0 голосов
/ 13 сентября 2018

В общем случае - нет, вы не можете отличить зашифрованные и незашифрованные данные.Бууут, глядя на твой пример, возможно, мы сможем приблизиться.У незашифрованных паролей будут «нормальные» символы, которые люди могут вводить на своих клавиатурах.Зашифрованные будут иметь все виды бинарного мусора, который не имеет смысла.Поэтому первая идея состоит в том, чтобы просто проверить, есть ли в пароле символы с кодами ASCII <32 или> 127.

Однако это еще не надежно.Иногда люди используют и более сложные символы.Если кто-то вводит Glāžšķūņu rūķīši в качестве своего пароля, это все еще допустимые слова на каком-то языке (в данном случае на латышском), но вы, вероятно, будете считать его зашифрованным.

Что приводит нас к вопросу - каков характернабор колонны?И это то место, которое мне кажется подозрительным с самого начала, потому что как вы храните и обычный текст и бинарный мусор?Пахнет, как будто кто-то не понимает наборы символов, потому что при нормальных обстоятельствах это создаст большой беспорядок.

В любом случае, в случае, если это текст utf-8, хранящийся в столбце latin-1 (обычная ситуация),вы можете использовать его в своих интересах на данный момент - все ячейки, которые являются , а не допустимой строкой utf-8 (плюс те, которые имеют символы <32), будут зашифрованы. </p>

(однакоесли это действительно так, я настоятельно советую вам исправить это в ближайшее время и убедиться, что utf-8 используется ВЕЗДЕ от начала до конца. НАМНОГО меньше головной боли таким образом. Вот обязательное чтение обо всем персонажеустановить чтоли)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...