Visual Basic Foro
General => General => Mensaje iniciado por: YAcosta en Septiembre 14, 2011, 12:59:17 pm
-
Hola.
Queriendo evitar algo de código para crear una encriptacion de un valor, y luego poder leer esa cadena y obtener el valor que encripte hice lo que a continuación muestro.
La verdad no tiene nada de especial o ingenioso, sucede que yo (humano) al leer esa cadena quiero saber de que valor se trata (osea mentalmente aplico el algoritmo), y cuando el programa la lea también sepa de que valor se trata. Son solo dos: verdadero y falso. Hasta alli ya di un dato pero usualmente un usuario que halla logrado meterse a la BD no sabrá si busca un verdadero o falso.
Esto lo quiero utilizar para validar a que clientes míos puedan tener una determinada funcionalidad (si es que la pagaron) y si entran a la BD y vean las cadenas no logren deducir cual es el valor que habilita la funcionalidad.
Entonces, como es difícil evaluarse solo, les pido si me puedan dar una mano en lo siguiente:
La tabla que esta debajo tiene cada registro un estado o valor que se interpretaré como verdadero o como falso. Quiero saber si me pueden decir cual es (obvio yo lo se solo quiero saber si esta bien "camuflado"), y con esto saber si salta a primera vista el algoritmo, si requiere un poco de razonamiento o si de plano esta complicado debido a que existen muchísimas opciones.
| ID | | CLAVE |
| 1 | | 1MJ2D8GFSA |
| 2 | | A0HKJ345BJ |
| 3 | | 3D0AJSDCA1 |
| 4 | | RDS1DSD1DA |
| 5 | | AMJ21EGFSA |
| 6 | | THSJF0S232 |
| 7 | | 03JGD91KSA |
| 8 | | 1DHS0FS0EW |
| 9 | | FI1DSWJE1A |
| 10 | | JFS3101SA1 |
Si sale sencillo resolver esto lo tiro al tacho y le hecho mano a un codigo de encriptacion, la verdad son solo 3 o 4 cosas que voy a evaluar y pongo 10 siendo exagerado, por eso no me ameritaba un code de encriptación.
Gracias.
-
Esto es un acertijo jejej, bueno solo por arriesgar
1 1MJ2D8GFSA True
2 A0HKJ345BJ True
3 3D0AJSDCA1 False
4 RDS1DSD1DA False
5 AMJ21EGFSA True
6 THSJF0S232 True
7 03JGD91KSA True
8 1DHS0FS0EW True
9 FI1DSWJE1A False
10 JFS3101SA1 False
Sumo los valores numéricos y si es impar es Verdadero, si es par es Falso
Anduve serca?
-
jeje, si creo que vendría a ser un acertijo... pero, no mi estimado, no es la respuesta, mmm, podría decir que no estuvo cerca aunque algunas respuestas coincidieron. En un par de días daré exactamente la "formula" o algoritmo donde se ve que cumple para todos los 10 casos.
Mmm, podría originar un concurso esto jeje. Pero cual seria el premio??? jejeje
Gracias por hacerla, se aceptan insistencias ;)
-
No se si entendí bien (ahh ignorancia la mía !!! ::)) pero me parece a haber encontrado 2 patrones...
El primero:
ID CLAVE
1 1MJ2D8GFSA ------> True
2 A0HKJ345BJ -------> False
3 3D0AJSDCA1-------> False
4 RDS1DSD1DA -----> True
5 AMJ21EGFSA ------> True
6 THSJF0S232 -------> False
7 03JGD91KSA ------> False
8 1DHS0FS0EW -----> True
9 FI1DSWJE1A ------> True
10 JFS3101SA --------> True
El otro "patrón" que encontré (aunque quizás no tenga nada que ver):
ID CLAVE
1 1MJ2D8GFSA ------> 1 --- A
2 A0HKJ345BJ -------> 2 --- B
3 3D0AJSDCA1 ------> 3 --- C
4 RDS1DSD1DA -----> 4 --- D
5 AMJ21EGFSA ------> 5 --- E
6 THSJF0S232 -------> 6 --- F
7 03JGD91KSA ------> 7 --- G
8 1DHS0FS0EW -----> 8 --- H
9 FI1DSWJE1A ------> 9 --- I
10 JFS3101SA --------> 10 --- J (0)
No se, eso fue lo que noté al menos en el primer patrón. En cuanto al segundo, no se que pueda tener con lo de verdadero o falso.
Saludos !!!
Manuel F. Borrego S. 8)
Barcelona. Venezuela.
-
Es muy dificil hacerlo si no hay al menos uno que sea true y uno que sea false :P si uno entra a la base de datos, al menos, con otros campos se puede ir ubicando (y a la vez con el programa andando) los valores
Eso es mi punto de vista :P
Para mi, la primera mas facil y mas "para despitar" es sumar los numeros de 1 cifra que haya, es true si la suma es impar/par y false si no lo es :P
Otra seria solo el primer o ultimo caracter, si es numero es true y si no es false (o la revez)
hay muchas variantes :P es un buen algoritmo :P
-
No esperare dos dias, hoy en la noche doy la respuesta.
Saludos
-
Y el ganador es..... jejeje
Bien, aqui la respuesta. Lo hago ahora porque nuestro amigo ADONAIRAFA estuvo bastante cerca de chuantarla y en premio (jeje) la suelto de una vez, su respuesta mas bien me invita a corregir (desordenar los registros) aquello por lo cual me parece que indujo a primera vista los patrones y casi certeramente.
Y digo "casi" porque erró en el primer patrón la 7, 8, 9 y 10. (la 10 la editaste mal porque te faltó el ultimo caracter).
También es cierto el segundo patron pero erró en la 4 a pesar de obtener el mismo caracter y si tiene una finalidad.
Bien, sin desordenar y tal como lo plantee la respuesta seria:
| ID | | CLAVE | | RESULTADO |
| 1 | | 1MJ2D8GFSA | | Verdadero |
| 2 | | A0HKJ345BJ | | Falso |
| 3 | | 3D0AJSDCA1 | | Falso |
| 4 | | RDS1DSD1DA | | Verdadero |
| 5 | | AMJ21EGFSA | | Verdadero |
| 6 | | THSJF0S232 | | Falso |
| 7 | | 03JGD91KSA | | Verdadero |
| 8 | | 1DHS0FS0EW | | Falso |
| 9 | | FI1DSWJE1A | | Verdadero |
| 10 | | JFS3101SA1 | | Verdadero |
Y es:
De izquierda a derecha debo contar según el numero de registro (ID) la posición de caracter, Si el ID es 4 cuento de izquierda a derecha y debo encontrar o un 0 o un 1 para saber si es verdadero o falso.
Este verdadero o falso debe validarse con el segundo patrón de derecha a izquierda. Usando el mismo ejemplo, cuento 4 hacia la derecha y debo hallar una letra, en este caso la D para confirmar que esta cadena corresponde a ese ID.
¿Porque el segundo patrón?, es una pretención de asegurar que si copian los registros manualmente queriendo conseguir un true no lo lograra tan fácilmente. La letra (segundo patrón) exige que ese registro este con ese ID y no con otro.
Bueno, este ejercicio por supuesto esta lejos de ser infalible e invulnerable, no busco tanto, para ello los algoritmos encriptadores, pero en un mar de desconocimiento por parte del usuario travieso y que no tenga ninguna información sobre lo que significan esas letras y números es mas facil que la malogre a que acierte. Por el lado de aplicación si el programa no encuentra lo que se espera podría hacer mil cosas como "defensa" de lo que quiera "proteger".
Por cierto que esto se puede mejorar mas y sin complicar mucho, esto es al final un contador de posición y un verificador, y puedo usar en vez de 0 y 1 otro caracter, conjugar dos caracteres, extender a 20 caracteres, en fin.
Bueno, afinando un poco mas esto, porque me parece que ya vi por donde van las evaluaciones, creo que lo implementaré, en todo caso en un piloto, con esto quiero validar que en una empresa puedan usar un proceso y en otra empresa (otro cliente) no puedan, crear una tabla con el nombre del proceso y ponerle al lado un true como que es muy fácil copiar ese true en todos los registros de esa tabla y validan todo, por eso quise complicar un poco, no habrá interfaz de acceso en la aplicación a esta tabla y seré yo quien meta la mano en el registro para validar o no.
Bueno, muchas gracias por ayudarme con el ejercicio.
Un abrazo
-
Bueno, Bueno Yvan !!! te las traes con tu encrptación !!! enhorabuena !!!
Y el detectar una parte de los patrones fue pura casualidad (en verdad me pregunto como fue que dí con "ellos"), me puse a observar fijamente y eso fue lo que encontré !!!
Saludos y un abrazo !!!
Manuel F. Borrego S. 8)
Barcelona. Venezuela.
PD: Por cierto Yvan, examinaste el pequeño
programa encriptador que te mandé días
atras?
-
Interesante método YAcosta
-
Interesante ... :) aunque yo pregunto, que pasaria en el ID 11? xD
-
Interesante ... :) aunque yo pregunto, que pasaria en el ID 11? xD
Hola Raul, te cuento, pues si hubiera id 11 (que en mi caso solo necesito 3 o 4 como dije antes) pues nada, no habría ningún problema solo la cadena tiene que crecer, y el 11 seria K, sin embargo, debo enfatizar que primero habría que evaluar para que querer usarla, osea esto es solo para un ambiente controlable y pequeño. Al tener yo una posibilidad exagerada de 3 o 4 procesos a controlar, pues 10 para MI ya es exagerado, asi que estoy cubierto, sino se sabe cuanto se quiere controlar lo recomendable es no usar este método pq tendria que reeditarse y ya no seria practico. Si fuera 7 u 8 lo plantearía hasta 20 caracteres y quizá en ese caso me iria por un encriptador como el de ADONAIRAFA que esta muy bueno. Aquí pongo un ejemplo hasta 20 pero esta vez desordenado para hacerlo mas confuso.
Como dije al inicio, mi excusa es para usarlo en un propósito pequeño y poder intervenir en el directamente ya que se conoce esta forma de algoritmo pudiendo hacerse algun otro derivado.
Les comento algo mas, la idea no se me presento recién en alguna reciente trasnochada :), yo uso una cadena de 200 caracteres para un control de ventanas (donde no llego ni a los 100) y lo uso desde hace años con éxito total, parecería tedioso crearlo o mantenerlo pero no lo es para nada. Este es un ejemplo con 50:
"00001000000000000110000101000000000000010010000000" esta cadena la tiene un usuario, otro usuario tendría otra cadena similar pero con sus unos en otras posiciones. No hay que sumar, sino leer la posición.
Y por la posición y donde encuentre un 1 determino si puede entrar o no un usuario a un determinado modulo. La cuestión se me hace super sencilla mantenerla porque uso OptionButtons como matriz de control, el Id del Option es la posición del permiso dentro de la cadena. Bueno, no se si esto resulta interesante exponerla pero bueno esa es la fuente de donde partió esta idea de encriptador sencillo.
Gracias.
-
PD: Por cierto Yvan, examinaste el pequeño
programa encriptador que te mandé días
atras?
Hola Manuelin, si le di una checada, no a profundidad pero hasta donde vi me parece bueno, ahora en la noche lo revisare con detenimiento. Un abrazo.