0
  1. 如何在 postgres 中使用带有 pgcrypto 插件的 sequelize。
  2. 如何使用 sequelize 加密和解密列的值
  3. 如何使用 nodejs 和 sequelize 使用 PGP_SYM_ENCRYPT 和 PGP_SYM_DECRYPT
4

1 回答 1

0

我将从您需要遵循的步骤开始介绍:)

将 pgcrypto 插件添加到您正在使用的模式中的步骤

  1. 登录到 postgres 并转到使用的 Schema或者如果您pgadmin正在运行... goto Schema... 右键单击​​... 单击Query Tool

  2. 在此处运行此查询以检查您的 postgres 中的可用插件 -

select * from pg_available_extensions

上面的命令将帮助您了解 Postgres 中已有的所有插件。滚动并检查那里是否pgcrypto可用。如果是...继续第 3 点,否则请先下载 pgcrypto 插件。

  1. 运行另一个查询,这将帮助您了解您在第 (1) 点中选择的 Schema 中有哪些插件 -
select * from pg_extension

上面的命令将帮助您了解您选择的 Schema 支持的所有 pluings。检查是否pgcrypto存在,如果是-跳到第(5)点,如果没有-继续第(4)点

  1. 运行此命令以将pgcrypto插件从扩展带到当前架构支持的扩展 -
create extension pgcrypto

您可以在第 (3) 点验证运行 cmd 以检查 pgcrypto 是否已成功拉入当前 Schema 支持的 pluings。


现在我们准备在我们的 Nodejs 应用程序中使用 pgcrypto

  1. 对于您要加密的查询,请使用sequelize它来加密它。使用下面的代码将该列的文本值修改为加密值。

    query: sequelize.fn("PGP_SYM_ENCRYPT", "data_to_encrypt", 
    "secret_key")
    
  2. 当您将数据保存到数据库时create- 数据将使用 PGP_SYM_ENCRYPT 加密,这是 pgcrypto 插件提供的一种方法。

  3. 要立即查询或解密这些值,您可以在 postgres 中运行此查询

select PGP_SYM_DECRYPT(colum_name::bytea, 'secret_key') FROM table where PGP_SYM_DECRYPT(column_name::bytea, 'secret_key' LIKE '%search_string%';
  1. 要解密 Node 应用程序中的值,请使用:
sequelize.findAll({
  attribute: [
    [
      sequelize.fn(
        'PGP_SYM_DECRYPT',
        sequelize.cast(sequelize.col('column_name'), 'bytea'), 
        'secret_key'
      ), 
      "column_name"
    ]
  ]
}).then(data => console.log(data))

注意:要自动化第一部分(将扩展名添加到 Schema 中),您可以使用sequelize raw query,这样您就不必每次都手动进行。

CREATE EXTENSION IF NOT EXISTS pgcrypto;
于 2021-12-28T08:53:23.180 回答