如何使用PostgreSQL加密密码?

Kar*_*yan 10 encryption postgresql password-encryption

我对编码密码有一些问题,我该怎么办呢.编码类型md5

digest(data text, type text) returns bytea;
CREATE OR REPLACE FUNCTION md(bytea) returns text AS $$
    SELECT encode(digest($1, 'sha1'), 'md5')
$$ LANGUAGE SQL STRICT IMMUTABLE;

INSERT INTO "login"(login, password, employee_id)
VALUES ( 'email',crypt('password', md('md5')), 1);
Run Code Online (Sandbox Code Playgroud)

*** 错误 ***

ERROR: syntax error at or near "digest"
SQL state: 42601
Character: 1
Run Code Online (Sandbox Code Playgroud)

Mar*_*erg 31

digest(data text, type text) returns bytea; 是无效的语法.

我推荐使用bcrypt.无需其他功能定义:

INSERT into "login" (login, password, employee_id) 
     VALUES ('email',crypt('password', gen_salt('bf'));
Run Code Online (Sandbox Code Playgroud)

后来...

UPDATE table SET password = crypt('password',gen_salt('bf'))
Run Code Online (Sandbox Code Playgroud)

并检查密码:

SELECT ... FROM table 
    WHERE password is NOT NULL 
      AND password = crypt('password-to-test',password);
Run Code Online (Sandbox Code Playgroud)

Bcrypt由Crafted Software和Jeff Atwood推荐.该负责人pgcrypto文档也可能是感兴趣.

  • 谢谢,你帮助了我. (2认同)

Piy*_*rma 5

我知道这个问题很老了,但对于那些有同样问题的人来说。

第一步:首先检查prcrypto是否安装

select e.extname, n.nspname from pg_catalog.pg_extension e left join pg_catalog.pg_namespace n on n.oid = e.extnamespace;
Run Code Online (Sandbox Code Playgroud)

第 2 步:如果未安装,则创建扩展

CREATE EXTENSION IF NOT EXISTS pgcrypto;

步骤 3:计算给定数据的二进制哈希值。

    CREATE OR REPLACE FUNCTION sha1(bytea) returns text AS $$
      SELECT encode(digest($1, 'sha1'), 'hex')
    $$ LANGUAGE SQL STRICT IMMUTABLE;
Run Code Online (Sandbox Code Playgroud)

最后一步:

如果您希望摘要为十六进制字符串,还可以使用编码函数

SELECT encode(digest('blue', 'sha1'), 'hex');

或者

直接地sha('blue')