AES_DECRYPT Получение значения из BLOB-объекта в машинописи - PullRequest
0 голосов
/ 04 июня 2018

Кодирование клиента Angular 5 / typcript, вызывающего веб-сервер node.js, который обращается к БД MySQL.Был успешно работающий вызов имен:

SELECT *
FROM stories JOIN users
ON stories.author_id=users.id
WHERE stories.story_id = 1;

Если мне нужно зашифровать фамилии авторов на уровне поля в БД, я мог бы использовать AES_ENCRYPT и AES_DECRYPT.Это меняет призыв к этому.Я использовал здесь dlname, чтобы отличить расшифрованное значение от поля lname.

SELECT *, AES_DECRYPT(lname, UNHEX(SHA2('some phrase',512))) AS dlname
FROM stories JOIN users
ON stories.author_id=users.id
WHERE stories.story_id = 1;

Это работает в среде разработчиков с использованием phpMyAdmin, dlname подходит для возврата и отображается в виде текста.Но когда его отправляют в prov env с MySQL и вызывают его, машинопись (клиент Angular 5) показывает dlname в виде BLOB-объекта [объект Object].Я проверил это с MySQL Workbench, и он также показывает это как BLOB-объект, который я могу щелкнуть правой кнопкой мыши, а затем «Открыть значение в средстве просмотра», и я вижу, что фамилия просто отлично.

Мой вопрос, какнаписать машинописный код, чтобы получить фактическое значение lname из большого двоичного объекта?Соответствующие строки кода: ...

this.http.get<StoryRes>(sRootURI + '/getStory/' + sDocID)
    .subscribe(data => {
      this.sAuthor = data[0].fname + ' ' + data[0].dlname;

В этом случае имя dlname отображается в консоли как [объект объекта].

1 Ответ

0 голосов
/ 04 июня 2018

Я понял это из некоторой справки, найденной в BLOB-данных, возвращаемых в MySQL с использованием AES_DECRYPT с предложением ORDER .Добавьте CAST (... AS CHAR) вокруг вашей функции AES_DECRYPT ...

SELECT *, CAST(AES_DECRYPT(lname, UNHEX(SHA2('some phrase',512))) AS CHAR) as dlname...

На стороне клиента просто обязательно вызовите новое имя поля dlname вместо фактического имени lname.На стороне клиента не требуется никаких дополнительных действий, они будут отображаться в виде текста, как и ожидалось.

...