2013-09-06 13 views
7

Ich habe einige Probleme mit der Codierung von Passwörtern, wie kann ich es tun. Art der Codierung md5Wie verschlüssele ich Passwörter mit PostgreSQL?

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); 

*** Fehler ** *

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

Das erste Zeichen in der ersten Zeile ist der Fehler. Sie haben Müll über Ihrer "ERSTELLEN ODER ERSETZEN FUNKTION" –

+0

Ich habe versucht, wie Sie sagten, aber ich habe einen Fehler. – Unknown

Antwort

24

digest(data text, type text) returns bytea; ist nicht gültig Syntax.

Ich empfehle stattdessen bcrypt verwenden. Keine zusätzlichen Funktionsdefinitionen sind erforderlich:

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

später ...

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

Und Überprüfung Passwort:

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

Bcrypt von Crafted Software und Jeff Atwood empfohlen. Die official pgcrypto docs könnte auch von Interesse sein.

+2

Danke, du hast mir geholfen. – Unknown