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

258
Views
Reconstruir/verificar el hash de contraseña Bcrypt de Ruby on Rails en Javascript

Tengo que reconstruir un proyecto de Ruby on Rails a Node.js. Bcrypt se usó para cifrar contraseñas en el proyecto Ruby y estoy tratando de reconstruir el mismo hash para poder copiar la contraseña codificada y los usuarios pueden iniciar sesión con las mismas credenciales en la versión del nodo.

Este hash $2a$11$j2IA8cPRFFC4YOXTl5kb9eF02fwNdLyFAPOvflQ3h/QdX8mE1SNK2 se usa para la contraseña Test1234 . Revisé el código de Ruby on Rails y vi la siguiente función para codificar una contraseña

Información general

 COST = 11 SALT = 1234567890

crear hash

 def password_hash(password) pwd = "#{password}#{SALT}" ::BCrypt::Password.create(pwd, cost: COST) end

¿Coinciden las contraseñas?

 def password_match?(password = nil) password ||= @params[:password] encrypted_password = get_encrypted_password return false if !encrypted_password || encrypted_password.size < 8 pwd = "#{password}#{SALT}" BCrypt::Password.new(encrypted_password) == pwd end def get_encrypted_password return unless @account @account.encrypted_password end

Por lo que sé algo sobre Ruby, esto significa que en la función password_match , pwd sería Test12341234567890 y BCrypt::Password.new($2a$11$j2IA8cPRFFC4YOXTl5kb9eF02fwNdLyFAPOvflQ3h/QdX8mE1SNK2) comprueba si Test12341234567890 (pwd) .

Cuando uso un verificador de Bcrypt en línea como https://bcrypt.online/ e ingreso el hash junto con el valor de pwd, no obtengo una coincidencia.

También traté de usar el método bcrypt.compare en el paquete de Javascript, pero tampoco funcionó.

¿Qué me estoy perdiendo?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Entonces hicimos un oopsie y resolvimos este problema en los comentarios. Aquí hay un resumen de todo como respuesta.

Yo:

Probé su función password_hash con "Test1234" y la sal que proporcionó. Obtuve $2a$11$bhdYASCaEPv/0HXv3OFtIupv8CgHFoEWkMonShKnNN1fkmRIg.07S como resultado, lo ejecuté a través del verificador en línea que vinculó y obtuve "El hash proporcionado coincide con el texto sin formato proporcionado".

BCrypt::Password.new(password_hash("Test1234")) == "Test12341234567890" También funciona bien y devuelve verdadero.

También probé Node.js con bcryptjs e hice bcrypt.compareSync('Test12341234567890', "$2a$11$bhdYASCaEPv/0HXv3OFtIupv8CgHFoEWkMonShKnNN1fkmRIg.07S"). También funciona bien y devuelve verdadero.

Thor:

Sí, ese es un nuevo hash que creaste con los mismos métodos. Pero por alguna razón, el hash ya creado $2a$11$j2IA8cPRFFC4YOXTl5kb9eF02fwNdLyFAPOvflQ3h/QdX8mE1SNK2 para la contraseña Test1234 que actualmente está almacenado en la base de datos no pasa la prueba de verificación en línea y la prueba compareSync en node.js

Yo:

Eso debería darle la idea de que el problema no está en la función de creación de hash de Ruby, ni en la función de prueba de hash de Node, sino en otro lugar (que técnicamente está fuera del alcance de esta pregunta). Tal vez su base de datos no almacene el hash completo por alguna razón, o lo almacene de manera incorrecta. Tal vez algo en algún lugar elimina o escapa algunos caracteres en el hash, dejándote con uno incompleto. Quizá algo de lo anterior le suceda a la sal. Tal vez el hash en la base de datos fue generado por una función hash diferente o más antigua. Tal vez la sal ha cambiado.

Thor:

¡Gracias por el comentario! Con su comentario descubrí que usaron una sal diferente a la que está dentro del archivo .env. Se almacenó en las variables de configuración de Heroku. ¡Todo está funcionando ahora!

about 4 years ago · Juan Pablo Isaza 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!