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文档也可能是感兴趣.
我知道这个问题很老了,但对于那些有同样问题的人来说。
第一步:首先检查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')