2015-10-31 3 views
2

Я представляю себя функциями шифрования в MYSQL.Ошибки строковых значений в AES_ENCRYPT/AES_DECRYPT

Просто написал простое заявление SQL, чтобы добавить зашифрованную запись в поле

INSERT INTO test_table (field1) VALUES(aes_encrypt('fieldentry','password')) 

Когда я выполнить SQL я получаю следующую ошибку

Ошибка 1366: Неправильное значение строки: «\ xC7 \ xE13 \ XC4 \ XF4 ...»для столбца 'FIELD1' в строке 1 SQL Заявление - CHANGE COLUMN field1 VARCHAR (255) NOT NULL COMMENT '!'

Теперь я прочитал, что это может иметь какое-то отношение к CHARACTER SET, и попытался изменить его с помощью utf8-default-сопоставления на utf8mb4 - сортировка по умолчанию, как рекомендовано, но это не имело никакого значения.

Я также попытался изменить тип столбца с VARCHAR на VARBINARY. SQL оператор побежал успешно, однако, когда я попытался следующее извлечь данные:

SELECT AES_DECRYPT(field1, '12345') AS endata FROM test_table 
    Do Until rst.EOF 
     Response.Write(rst("endata")) 
     rst.movenext 
    Loop 

прогонов цикла, но значения не возвращаются (пустые строки)

Я просто искал простой что шифровать, а затем расшифровывать мои данные с помощью пароля в функции AES_ENCRYPT/AES_DECRYPT.

ответ

3

AES_ENCRYPT() encrypts a string and returns a binary string. AES_DECRYPT() расшифровывает зашифрованную строку и возвращает исходное строку.

Таким образом, вы должны изменить тип field1, firstname от VARCHAR(255) до VARBINARY(255). Это будет решить проблему ..

EDIT: Для типа missmatch .. пожалуйста, попробуйте это ..

SELECT *, 
     CAST(AES_DECRYPT(field1, 'mypassword') AS CHAR(50)) end_data 
FROM user 

Надеется, что это помогает ..

+0

Спасибо. AES_ENCRYPT() отлично работает с хранением данных, однако AES_DECRYPT() возвращает несоответствие типа. ВЫБРАТЬ идентификатор, AES_DECRYPT (field1, 'мойпароль') AS endata ИЗ test_table Response.Write (первой ("endata") и "
") –

+0

Благодаря Шубин, идеальное решение. –

Смежные вопросы