Variables Aleatorias

Hola , aver si alguien me puede hechar una mano, tengo una aplicacion de acceso y autentiacion ,hasta ahi no tengo problemas ,el problema esta en que el usuario cuando se valida le hago que salga una nueva opcion atraves de un boton para asignarle la clave de acceso ,y cuando pulso el boton sale una nueva ventana donde sale una
tabla con vente codigos de tres cifras y cada vez puede ser una distinta porque es aleatoriamente.

Yo he pensado hacelo creando variables a las que le asignado los numeros aleatoriamente y los resultado los he guardado en un fichero para que luego salga por pantalla atraves de un jtable pero no se como hacer para entre las 20 variables me salga una aleatoriamente ya que cada variable ya tiene otorgado un numero que antes le dia aleatoriamente. Espero que me podais echar una mano,por lo menos a orientarme como podria acerlo o quizas de otra forma sea mas facil.Un saludoo.

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Podrias poner un ejemplo con

Podrias poner un ejemplo con 5 números? Por que no te entendí a eso de "no se como hacer para entre las 20 variables me salga una aleatoriamente ya que cada variable ya tiene otorgado un numero que antes le dia aleatoriamente"

Quieres crear 20 números aleatorios de tres cifras? Pero.. lo del número anterior eso no lo entiendo.

Por ciero para crear 20

Por ciero para crear 20 número ( o N ) aleatorios puedes usar una lista java.util.List y la clase java.util.Random

Algo como:

import java.util.List;
import java.util.ArrayList;
import java.util.Random;

class Veinte {
    public static void main( String ... args ) {
        Random random = new Random();
        List<Integer> numeros = new ArrayList<Integer>();
        for( int i = 0; i < 20 ; i++ ) {
            numeros.add( random.nextInt( 1000 ) );
        }
        for( int n : numeros ) {
            System.out.printf( "%03d%n", n );
        }
    }
}

O sea, generas 20 numeros del 0 al 999 y los vas almacenando en una lista. Lo número menores a 100 también se consideran de 3 cifras, solo que la primera es el 0.

Imagen de ezamudio

No entendí la pregunta

Si estás generando números aleatorios, para qué los almacenas? Y... si generaste números aleatorios, por qué tienes problema para escoger, de manera aleatoria, uno de esos números que generaste? y por qué tienes que generar varios números aleatorios para escoger uno de ellos al azar? No es más fácil generar un número en el momento y ya?

Me recordó un poco esto...

Te acuerdas de un strip de

Te acuerdas de un strip de Dilbert de hace 12 años? :-o

También se podrían tomar datos de este libro:

A Million Random Digits with 100,000 Normal Deviates aunque creo que están trabajando en la fe de erratas porque se equivocaron en la pagina 300

:P

Pero ya en serio, es muy

Pero ya en serio, es muy probable que si haya un caso donde necesites generar esto números y luego almacenarlos. Se me ocurre la tarjeta "acceso seguro" de Bancomer, donde es básicamente una matriz de 100 números y debes de escribirlos cuando ingresas al portal.

Pero hay que esperar que Payan de más luz al respecto para ver que intenta hacer.

Por cierto alguna vez a un amigo le salio esta página al entrar al portal que decía: "Por su seguridad escriba las 100 claves de su tarjeta", ja.. lo más curioso es que la direccion en el browser si era la de bancomer.

Imagen de ezamudio

claro

Conozco el mecanismo de las tarjetitas, funciona bien. Pero en el post original dicen que quieren generar 20 números aleatorios, y luego elegir uno al azar, ya no sé para qué. Y ya sabes que luego pasan cosas tipo "HOYGAN cómo puedo saber si una variable es tipo int o String?" y resulta que quieren hacer un ORM, porque les dio flojera leer los docs de Hibernate...

Imagen de Payan

ok te explico, la aplicacion

ok te explico, la aplicacion de nuevo lo que tengo hecho y lo que quizas me podais exar una mano a salir de esto :

Lo que tengo hecho de la aplicacion:

Tengo hecha la base de datos y la conexion para los usuarios.Entonces cuando el usuario se quiere validar pone en el campo
usuario su nombre y le da a un boton que pone claves ,entonces atraves de ese boton valida al usuario o no segun este o no registrado ,una vez se ha validado ...

(lo puedo hacer de otra forma con varios campos en la base de datos pero me parece mu poco profesional hacerlo con 20 campos de contraseñas en la base de datos)

Ahora lo que tengo muxas dudas para resolverlo es :
una vez a validado el usuario al pulsar el boton clave ,me salga otro panel informativo ,que eso si se hacerlo pero que me salga en forma de tabla que he guardado anteriormente en un fichero y que cada dato sea una variable para que luego pueda usarla de manera aleatoria porque cada vez que acceda me pida una distinta y

Mira esto seria lo que me saldria en un panel informativo al validar usuario ,cada usuario tiene su propia matriz de claves
y entonces el programa me puede pedir cualquier contraseña pero de las que tiene asignada cada usuario al azar ,es decir una vez validado ,la aplicacion
me dice por ejemplo ingresa la clave B3,dejando a las demas inservibles

1 2 3 4 5

A 023 345 445 543 092

B 832 432 123 234 093

C 563 093 756 025 774

D 095 984 429 765 888

Lo de los 20 numeros era un ejemplo.
Entonces ingreso la clave junto al usuario y valido de nuevo y entro en una zona prirvada.
si no entiendes algo me lo comentas un saludo

y le da a un boton que pone

y le da a un boton que pone claves este botón hace que aparezca una pantalla con campos en blanco donde van a ir las claves? O aparece una pantalla llena de datos que son las claves?

entonces atraves de ese boton valida al usuario Como lo valida? por la velocidad con que da click o como? O lee la información que el usuario escribió.

A ver lo que te entiendo es más o menos lo siguiente:

1.- El usuario abre la aplicaciónema
2.- El sistma muestra un campo para que pueda escribir su usuario
3.- El usuario ingresa su nombre de usuario y da click on claves.
4.- El sistema presenta una pantalla con la matriz de 20 claves y le pide que le de la B3
5.- El usuario... .. lee, la pantalla? y le dice lo que el sistema ya sabe?
6.- Ya me perdí.

Quizá ayude si lo redactas de la forma en la que lo puse. el usuario hace y el sistema responde, el usuario hace y el sistema responde.

Así ( a grades razgos ) es como se redacta un caso de uso.

Imagen de CybJer

Se me hace una solucion al

Se me hace una solucion al estilo Dr. Doofenshmirtz para algo asi, eso tendria caso solo en el ejemplo que comento @OscarRyz que el usr tenga una tabla impresa y se le pida el un numero de ella.

Pero si se presenta en pantalla no veo el caso de almacenar los datos.

Mejor generar los 20 numeros cada vez meterlos en un arreglo
Generar 2 numeros aleatorios (que especifiquen posiciones x,y del arreglo)
Guardar el numero de esa posicion (momentaneamente)
Mostrarlos 20 en tabla
Pedir el numero en las posiciones A 4(Representativas de la posicion del numero correcto en pantalla)
Y comparar contra el almacenado

Esto serviria mas como captcha que con el sentido que le quieres dar.
Que conste que el problema que le veo es que se muestre en pantalla la tabla de pass

Imagen de Payan

ok te explico ; 1.- El

ok te explico ;

1.- El usuario abre la aplicacion

2.- El usuario ingresa nombre de usuario y pulsa clave.

3.-Suponiendo que la validacion es correcta, se muestra en pantalla un panel que solo sirve de informacion,
con una tabla por ejemplo con 20 claves, y ademas en la pantalla primera aparecera una nueva informacion
con respecto a la ventana abierta de la tabla , que aleatoriamente a elegido una clave que digapor ejemplo introduce la A5.

4.-Entonces se introduce la clave que se ha pedido y valida con un boton aceptar y se accede a una pantalla personal.

5.-Las claves que aparecen en pantalla solo es para informar. Esas claves se recogen de un fichero o de otro sitio que se han creado al registrar al usuario.

Yo habia pensado poner una variable para cada clave y que aleatoriamente cada vez que entre
se pida una de ellas y se anulen las demas.Es aqui donde me pierdo. No se como elegir una variable aleatoria entre quizas 20 o 30
variables que he creado y una vez elegida esa variable el programa solo reconozca esa variable ,que en realidad es la clave.
Tambien he de decir que yo lo que he hecho es hacer una matriz aleatoria para cada usuario cuando se registra y he imprimido esa matriz en un fichero con el nombre de usuario.(Luego no se como utilizar eso de forma automatica para que la aplicacion muestre la tabla con las claves que estan en el fichero que se creo automaticamente),Quizas haya una forma mas sencilla.Si no me explicado me lo comentas sin problemas ,un saludo

Imagen de neko069

Entonces lo que quieres hacer

Entonces lo que quieres hacer sí es más como un captcha, quieres generar un conjunto de claves aleatorias, de ahí seleccionar una y que el usuario la introduzca, la compare, y si efectivamente es la misma, te dé el acceso (o privilegios o dinero, o lo que sea)
Pues si ya te lo definieron así, y así tiene que ser, no sería necesario crear un archivo, si nada más es para un único acceso, genera tus números y los metes en un arreglo bidimensional, ése arreglo pasa de forma transparente en un JTable para presentarlo en una pantalla en Swing, y si es web, pues no habría mayor problema de presentarlo en una tabla de HTML.... cuando tú le des al usuario la opción de teclear la clave seleccionada, es porque tú ya la extrajiste directamente del arreglo, por lo que el hecho de decirle que teclee el número correspondiente a X posición sería más significativo, porque ya lo tienes....
Si va por ahí o ya la regué???
Ahora, si no es obligatorio que lo implementes a mano, chécate JCaptcha

Imagen de CybJer

Por eso dije Mejor. En mi

Por eso dije Mejor.
En mi solucion te explico una manera sin problemas de (guardar datos en bd, o leer archivos para lograr un efecto similar).

No tiene caso que traigas tus 20 contraseñas de una bd o de un archivo para mostrarlas en pantalla ¿Por que?
Si las traes asi basta con que yo sepa el nombre de usuario para acceder a tu sistema y saber las posibles 20 diferentes contraseñas que un usuario puede teclear (Hasta podria poner a un bot a ingresar a tu sistema a un area privada).

Eso traeria: Seguridad nula (queriendo verte muy pro)

La solucion adecuada si insistes en guardar las posibles pass, es que al registro se haga imprimir al usuario su tabla "personalizada" de passwords y al pretender ingresar:
1.-Consultes su registro de passwords y lo metas en un arreglo(personal ya sea de bd o de archivo como quieras solucionarlo)
2.-De ahi sigues los pasos:
Generar 2 numeros aleatorios (que especifiquen posiciones x,y del arreglo)
Guardar el numero de esa posicion (momentaneamente)
Mostrarlos 20 en tabla
Pedir el numero en las posiciones A 4(Representativas de la posicion del numero correcto en su tarjeta de pass)
Y comparar contra el almacenado.

Imagen de Payan

Las claves serian definidas

Las claves serian definidas para siempre salvo que el administrador de la web le otorge nuevas claves.
voy a probar que tal me va.gracias por exarme una manita con estas dudas xD.

Imagen de Payan

Variables aleatorias

¿sabeis como puedo elegir una variable aleatoria entre 5 por ejemplo?Elegir numeros si pero variables no se como .

Por ejemplo :

tengo

int x= 234;
int z=123;
int y= 874:
int o=389;
int j=783;
¿como eligo al azar entre x,z,y,o,j?

Imagen de ezamudio

mal camino

Suena como que vas camino a implementar uno de los peores esquemas de seguridad en internet. De casualidad tu cliente no es Sony? ;)

Ahhhhhh vaya.. ya entendí,

Ahhhhhh vaya.. ya entendí, si, como dice neko, estas queriendo hacer algo como un catpcha

A ver a menos que te haya entendido completamente mal, esto que estas queriendo hacer es identico a que solamente le pidas su id de usuario.

Por lo que leí en tu descripción ni siquiera le estas pidiendo la contraseña, entonces:

1.- Si llego yo a la aplicación ( o más bien alguién que sepa que mi usuario es OscarRyz )
2.- Escribo mi usuario,
3.- el sistema me va a responder con una tabla de 20 número y me va a decir: "dime el 5"
4.- y yo lo voy a escribir 238

Lo único que estarías validando entonces es que fuea un humano, correcto?

Porque no haces ( si está en tus posibilidad elegir ) algo como una validacion tan sencilla como: Cuanto es 2 más 2 o algo así.

El flujo sería:

1.- El usuario escribe su userid
2.- El sistema calcula la pregunta ( y la respuesta clao ) y la deja en sesion ( o el equivalente )
3.- Se le presenta al usuario la pregunta sustituyendo el operador por la la descripción ( ejemplo + reemplazarlo por "más" )
4.- El usuario escribe la respuesta
5.- El servidor compara la respuesta con lo que tenía guardado en la sesion.

Me parece muchísimo más efectivo y fácil de hacer que lo que sugieres.

Como bien dice Enrique, no tiene caso almacenar todas esas claves si lo primero que vas a hacer es pedirle al usuario que las lea. Lo mismo da que lea la misma o que lea una nueva.

También hay otros mecanismo muchísimo más seguros para validar usuarios y contraseñas. A ver si Enrique nos da algunos links al respecto.

Imagen de CybJer

Es evidente que estas

Es evidente que estas aprendiendo a programar, comienza con pseudo codigo hay muy buenos post aqui sobre como llevar un problema a codigo.
Mira hay cosas que se llaman arreglos, matrices, vectores y no se como mas (tambien hay listas) investiga un poco veras que la solucion es mas simple que como te la estas planteando.

Lo que quieres se puede lograr literalmente asi:

public int selecciona(int numvar) {
        switch (numvar) {
            case 1:
                return x;
                break;
            case 2:
                return z;
                break;
            case 3:
                return y;
                break;
            case 4:
                return o;
                break;
            case 5:
                return j;
                break;
        }
    }

Y eso es de lo mas chafa que se puede hacer

¿sabeis como puedo elegir una

¿sabeis como puedo elegir una variable aleatoria entre 5 por ejemplo? Elegir numeros si pero variables no se como

¿Querras decir como elegir una variable de forma aleatoria?

No deberías de crear veinte variables y asignarles números. Para eso existen los arreglos ( o las listas como mencioné acá http://www.javamexico.org/blogs/payan/variables_aleatorias#comment-13757 desde el principio).

Pero bueno, si tu insistes en hacerte daño te ayudamos. Adicionalmente al ejemplo de Cybjer puedes hacer esto:

// Tus variables
int x= 234;
int z=123;
int y= 874:
int o=389;
int j=783;

// arreglo para elegir una de foma aleatoria
int [] datos = { x,y,z,o,j }; // ¬¬

// clase para obtener un numero al azar.
Random r = new Random();

// Y el número al azar es!!
int numeroAlAzar = datos[ r.nextInt( 5 ) ];

// Da daaah!!..

Aunque no te sorprenda si te devuelve muchas veces el mismo si creas el objeto random cada vez, es mejor que lo crees en una sola ocasión. Lee la doc para entender porque.

Pero bueno es mala idea lo de......

Nada... no dije nada.

Imagen de Payan

Si es asi ,no es una forma

Si es asi ,no es una forma segura ,pero me piden acerlo de esa forma,gracias ahora tengo las dudas resueltas
muchas gracias.

Imagen de Payan

ok le echare un vistasooo

ok le echare un vistasooo gracias

Imagen de Payan

ok lo leere para enterarme un

ok lo leere para enterarme un poko mas,gracias