18

パスワードのエンコードに問題があります。どうすればよいですか。エンコーディングの種類 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);

***エラー** *

ERROR: syntax error at or near "digest"
SQL state: 42601
Character: 1
4

2 に答える 2

48

digest(data text, type text) returns bytea;は有効な構文ではありません。

代わりに使用することをお勧めしbcryptます。追加の関数定義は必要ありません:

INSERT into "login" (login, password, employee_id) 
     VALUES ('email',crypt('password', gen_salt('bf'));

後で...

UPDATE table SET password = crypt('password',gen_salt('bf'))

そしてパスワードを確認します:

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

Bcrypt はCrafted SoftwareJeff Atwoodによって推奨されています。公式のpgcrypto ドキュメントも興味深いかもしれません。

于 2013-09-06T14:25:17.187 に答える
4

この質問は古いことは知っていますが、同じ問題を抱えている人向けです。

ステップ 1:まず、prcrypto がインストールされているかどうかを確認します

select e.extname, n.nspname from pg_catalog.pg_extension e left join pg_catalog.pg_namespace n on n.oid = e.extnamespace;

ステップ 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;

最後のステップ:

また、エンコード機能を使用しますダイジェストを16進数文字列として使用する場合

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

また

直接sha('blue')

于 2019-05-17T13:29:05.730 に答える