【问题标题】:AES_DECRYPT Getting the value from a blob in typescriptAES_DECRYPT 从打字稿中的 blob 中获取值
【发布时间】:2018-11-14 02:34:20
【问题描述】:

编写 Angular 5/typescript 客户端调用 node.js 网络服务器与 MySQL 数据库通信。已成功调用名称:

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

如果我需要在数据库中的字段级别加密作者的姓氏,我可以使用 AES_ENCRYPT 和 AES_DECRYPT。这会改变对 this 的调用。我这里用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 在返回时很好,并显示为文本。但是当使用 MySQL 推送到 prod env 并调用它时,打字稿(Angular 5 客户端)将 dlname 显示为 blob [object Object]。我用 MySQL Workbench 对其进行了检查,它还显示为一个 blob,我可以右键单击它,然后“在查看器中打开值”,我看到姓氏就好了。

我的问题是,如何编写打字稿代码以从 blob 中获取实际的 lname 值?相关的代码行是...

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

在这种情况下,dlname 在控制台中显示为 [object Object]。

【问题讨论】:

    标签: mysql typescript blob aes angular5


    【解决方案1】:

    我从BLOB data returned in MySQL using AES_DECRYPT with ORDER clause 中的一些帮助中找到了答案。在 AES_DECRYPT 函数周围添加 CAST(... AS CHAR)...

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

    在客户端,只需确保调用新字段名称 dlname 而不是实际名称 lname。客户端不需要任何额外的东西,会像预期的那样以文本的形式出现。

    【讨论】:

      猜你喜欢
      • 2022-01-12
      • 2014-11-29
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      • 2017-04-13
      • 2017-08-17
      相关资源
      最近更新 更多