1、安装contrib模块
yum install postgresql-contrib
2、启用模块,数据库中直接启用
CREATE EXTENSION pgcrypto;
pgcrypto支持的功能列表
==通用哈希函数==
digest(data text, type text) returns bytea
digest(data bytea, type text) returns bytea
返回由type(md5,sha1,sha224,sha256,sha384,sha512)指定的数据的哈希值为bytea(二进制)
== HMAC功能==
hmac(data text, key text, type text) returns bytea
hmac(data bytea, key text, type text) returns bytea
以密钥为密钥返回数据的MAC(消息认证码)散列。type与摘要功能相同。此功能用于检查消息是否已被篡改。由于在计算散列值时密钥也被散列在一起,因此只有在数据相同但密钥已知的情况下才能生成相同的散列值
==密码功能==
crypt(password text, salt text) returns text
gen_salt(type text [, iter_count integer ]) returns text
crypt使用标准crypt函数计算密码哈希值。gen_salt生成随机盐。即使将相同的密码用于salt,也只能通过简单地比较哈希值来理解它。
crypt()和gen_salt()结合使用,同一个原始值, 每次得到的hash值是不一样的
原因是gen_salt每次都会给出1个随机值。
crypt()和gen_salt() 主要用于密码的存储和匹配,既然每次的结果不一样,那么如何匹配呢,如下:
postgres=# select crypt('123',gen_salt('bf',10));
crypt-------------------------------------------------------------- $2a$10$76xcvT9pZpLL8dKn.RY3nOQXjgW1Yqo0nFBlbiIjqmQO61hE8VlZy(1row)
postgres=# select crypt('123','$2a$10$76xcvT9pZpLL8dKn.RY3nOQXjgW1Yqo0nFBlbiIjqmQO61hE8VlZy'); crypt-------------------------------------------------------------- $2a$10$76xcvT9pZpLL8dKn.RY3nOQXjgW1Yqo0nFBlbiIjqmQO61hE8VlZy(1row)