2013-09-06 4 views
7

パスワードのエンコードにいくつか問題がありますが、どうすればいいですか。 MD5PostgreSQLでパスワードを暗号化するにはどうすればよいですか?

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 
+1

最初の行の最初の文字はエラーの場所です。あなたはあなたの "CREATE OR REPLACE FUNCTION"の上にごみがあります –

+0

私はあなたが言った方法を試しましたが、私はエラーがあります。 – Unknown

答えて

24

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で推奨されています。 official pgcrypto docsも興味深いかもしれません。

+2

ありがとう、助けてくれた。 – Unknown

関連する問題