Foros del Web » Programación para mayores de 30 ;) » Java »

Cifrado de contraseñas

Estas en el tema de Cifrado de contraseñas en el foro de Java en Foros del Web. Hola buenas tardes a todos me gustaría saber que tipo de cifrado utiliza active directory al exportar los usuarios a sql server, la verdad es ...
  #1 (permalink)  
Antiguo 28/07/2015, 12:30
 
Fecha de Ingreso: julio-2015
Mensajes: 19
Antigüedad: 9 años, 4 meses
Puntos: 0
Cifrado de contraseñas

Hola buenas tardes a todos me gustaría saber que tipo de cifrado utiliza active directory al exportar los usuarios a sql server, la verdad es que no se mucho del tema espero alguien pueda auxiliarme.
Gracias buen día.
  #2 (permalink)  
Antiguo 28/07/2015, 13:02
Avatar de GusGarsaky  
Fecha de Ingreso: febrero-2015
Mensajes: 33
Antigüedad: 9 años, 8 meses
Puntos: 2
Respuesta: Cifrado de contraseñas

Según he visto en un post, SQL Server desde la edición 2012 utiliza SHA_512 con un salt de 32 bits.
  #3 (permalink)  
Antiguo 28/07/2015, 15:54
 
Fecha de Ingreso: julio-2015
Mensajes: 19
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Cifrado de contraseñas

gracias por el dato, aunque ya intente validar con sha-512 y no, me dice que la contraseña esta mal escrita :(.

Si tuviesen otra opción o como saber que método de encriptación utiliza por favor.. Gracias.
  #4 (permalink)  
Antiguo 28/07/2015, 16:23
Avatar de GusGarsaky  
Fecha de Ingreso: febrero-2015
Mensajes: 33
Antigüedad: 9 años, 8 meses
Puntos: 2
Respuesta: Cifrado de contraseñas

Es raro, no debería haber problemas. ¿Puedes poner el código donde validas la password?
  #5 (permalink)  
Antiguo 29/07/2015, 09:46
 
Fecha de Ingreso: julio-2015
Mensajes: 19
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Cifrado de contraseñas

<%@page import="java.sql.ResultSet"%>
<%@page import="Clases.Conexion2"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Bienvenido</title>
</head>
<body>
<%
Conexion2 DB = new Conexion2();

String usuario = request.getParameter("usuario");
String password = request.getParameter("password");


String user = "";

ResultSet resul = DB.Consulta("select * from UserTelecom where userPrincipalName='"+usuario+"'");

if(resul.next()){

ResultSet resultado = DB.Consulta("select userPrincipalName from UserTelecom where userPrincipalName='"+usuario+"' and pwdLastSet ='"+password+"'");

while(resultado.next()){
usuario = resultado.getString("usuario");
}

if(user != ""){
session.setAttribute("userPrincipalName", user);
session.setAttribute("logged",true);
response.sendRedirect("bienvenido.jsp");
}else{

session.setAttribute("userPrincipalName","");
session.setAttribute("logged",false);


%>




<script>
alert("Contraseña incorrecta, inténtelo de nuevo.");
location.href="index.jsp";
</script>
<%
}
}else{
%>
<script>
alert("El usuario \" <%=usuario%> \" no existe en el dominio");
location.href="index.jsp";
</script>
<%}


DB.Close();
%>


</body>
</html>


Este es mi código donde valido la contraseña de logeo
  #6 (permalink)  
Antiguo 29/07/2015, 11:54
Avatar de GusGarsaky  
Fecha de Ingreso: febrero-2015
Mensajes: 33
Antigüedad: 9 años, 8 meses
Puntos: 2
Respuesta: Cifrado de contraseñas

Siempre te mostrará contaseña incorrecta, porque a la variable user nunca le asignas un valor, por ende, cuando haces if(user != "") nunca se cumplirá ya que user está vacío, y por consiguiente, se ejecutará la sentencia else en la que muestras 'contraseña incorrecta'.

Te voy a dar algunos consejillos.

1. No mezcles código de modelo/negocio en tus vistas. Los scriptlets son malísimos desde un punto de vista de principios de desarrollo de software. Debes tener una capa de abstracción, que en tu caso es una clase llamada DB.

2. En lugar de scriplets usar JSTL (etiquetas).

Por ejemplo, esta clase se encarga del acceso a datos (DAO):

Código Java:
Ver original
  1. public class LoginDao {
  2.  
  3.     public String login(String username, String password) {
  4.         String sql = "SELECT usuario FROM tusuario WHERE " +
  5.                      "userPrincipalName = ? AND pwdLastSet = ?";
  6.         try (Connection con = ConnectionHelper.getConnection();
  7.              PrepareStatement pst = con.prepareStatement(sql)) {
  8.              // validas username y password si deseas
  9.              ResultSet rs = pst.executeQuery();
  10.              while(rs.next()) {
  11.                 return rs.getString("username");
  12.              }
  13.         } catch(SQLException e) {
  14.             e.printStackTrace();
  15.             return "";
  16.         }
  17.     }
  18. }

Y así la usas en tu JSP:

Código XML:
Ver original
  1. <!-- esto va en el top de tu página JSP -->
  2. <jsp:useBean id="userDao" class="tuspaquetes.UserDao" />
  3.  
  4.  
  5. <!-- crea una variable 'loginUsername' y le asigna el retorno de la
  6.    llamada al método login(String username, String password) -->
  7. <c:set var="user"
  8.    value="#{userDao.login(request.getParameter('username'), request.getParameter('password')}" />
  9.  
  10. <!-- si loginUsername no está vacío, login correcto -->
  11. <c:if test="#{!user.isEmpty()}">
  12.     <c:set var="userPrincipalName" value="#{user}" scope="session" />
  13.     <c:set var="logged" value="#{true}" scope="session" />
  14.     <c:redirect url="bienvenido.jsp" />
  15. </c:if>
  16. <!-- caso contrario -->
  17. <c:otherwise>
  18.     <script>alert('Usuario o contraseña incorrectos');</script>
  19. </c:otherwise>

Fíjate que el resultado de la llamada al método login, se lo asignamos a 'user', y esta misma variable la asignamos al scope session.

1. <c:set> Establece variables.
2. <c:if> If
3. <c:otherwise> Else
4. <jsp:useBean> Usar una clase en JSP (como hacer import)
5. <c:redirect> Redireccionar
  #7 (permalink)  
Antiguo 29/07/2015, 14:15
 
Fecha de Ingreso: julio-2015
Mensajes: 19
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Cifrado de contraseñas

gracias buen aporte muchas gracias por la observación y el consejo, pero tengo una duda en su código solo compara el usuario y la contraseña que se le ingrese desde el código?? es que ya me confundí.

Y lo que pasa es que con mi código valida la contraseña solo si se la coloco encriptada es por eso que quería saber que tipo de encriptación utiliza sql porque ya busque y no encuentro nada, y si le pongo la contraseña real me dice que no es correcta :(

Gracias.
Buena tarde :D
  #8 (permalink)  
Antiguo 29/07/2015, 14:32
Avatar de GusGarsaky  
Fecha de Ingreso: febrero-2015
Mensajes: 33
Antigüedad: 9 años, 8 meses
Puntos: 2
Respuesta: Cifrado de contraseñas

Para un login solo necesitas que el username y la password sean correctas. Al enviar como condición la contraseña en tu consulta, el gestor de base de datos internamente compara las contraseñas con un algoritmo específico, por ende, no tienes que nada más que comparar la contraseña en texto plano ingresada con la hasheada en la base de datos.
  #9 (permalink)  
Antiguo 30/07/2015, 10:43
 
Fecha de Ingreso: julio-2015
Mensajes: 19
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Cifrado de contraseñas

considero que no tendría que hacer mas que meter la contraseña original en el formulario y que sql la convierta a su manera pero no es así, ya que para poder iniciar bien tengo que introducir la contraseña encriptada de sql :(

Gracias por el aporte.

Etiquetas: cifrado, contraseñas, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:57.