Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

263
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda