Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

265
Views
No se puede recuperar la contraseña hash de la base de datos postgreSQL con Python

Así que estoy escribiendo un script de inicio de sesión simple en python cgi. No estaba funcionando en el host local (mostrando el error 500), por lo que ejecutar el código por sí solo reveló que había problemas de código. El código es el siguiente:

 #!/usr/bin/python2.7 import cgi import cgitb import hashlib import psycopg2 from dbconfig import * cgitb.enable() print "Content-Type: text/html" def checkPass(): email = "person@gmail.com" password = "blahblah" password = hashlib.sha224(password.encode()).hexdigest() result = cursor.execute('SELECT * FROM logins WHERE email=%s passhash=%s') % (email, password) print str(result) if __name__ == "__main__": conn_string = "host=%s dbname=%s user=%s password=%s" % (host, database, dbuser, dbpassword) conn = psycopg2.connect(conn_string) cursor = conn.cursor() checkPass()

La línea en la que se atasca el programa es cursor.execute de la consulta postgre. El error que se muestra es el siguiente:

 Traceback (most recent call last): File "login.py", line 28, in <module> checkPass() File "login.py", line 20, in checkPass result = cursor.execute('SELECT * FROM logins WHERE email=%s passhash=%s') % (email, password) ProgrammingError: syntax error at or near "passhash" LINE 1: SELECT * FROM logins WHERE email=%s passhash=%s

Y cabe señalar que apunta a passhash. Intenté ingresar la consulta directamente en la base de datos en la consola psql como:

 SELECT * FROM logins WHERE passhash=storedhashedcode;

Sin embargo, esto devuelve un error sobre una columna del nombre del hash (es decir, e342hefheh43hfhfhefherf... etc.) que no existe. ¿Qué estoy haciendo mal aquí? Lo único que se me ocurre es que los hashes se almacenan de manera diferente.

Nota: aquí está el código que usé para almacenar la contraseña, etc., si eso ayuda:

 email = "person@gmail.com" allpass = "blahblah" password = hashlib.sha224(allpass.encode()).hexdigest() cursor.execute('INSERT INTO logins (email, passhash) VALUES (%s, %s);', (email, password)) conn.commit()

¡Cualquier ayuda sería muy apreciada!

ACTUALIZAR:

Como sugirió Decly, he cambiado la consulta a:

 result = cursor.execute('SELECT * FROM logins WHERE email=%s AND passhash=%s') % (email, password)

Esto ahora produce el error:

 ProgrammingError: column "s" does not exist LINE 1: SELECT * FROM logins WHERE email=%s AND passhash=%s

Entonces, obviamente, está usando s como columna por alguna razón. ¿Por qué no acepta mis nombres de variables?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

En:

 'SELECT * FROM logins WHERE email=%s passhash=%s'

Te falta un AND en la expresión booleana:

 'SELECT * FROM logins WHERE email=%s AND passhash=%s'

Cuando escribe la consulta en psql, le faltan las comillas para el literal de cadena, por lo que postgresql está infiriendo un nombre de columna, debe escribir:

 SELECT * FROM logins WHERE passhash='storedhashedcode';

También está poniendo el paréntesis en el lugar equivocado, la oración de Python debería ser:

 result = cursor.execute('SELECT * FROM logins WHERE email= %s AND passhash= %s', (email, password))
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!