elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


  Mostrar Mensajes
Páginas: 1 ... 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 [310] 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 ... 431
3091  Programación / Programación C/C++ / Re: Funcion palíndromo. en: 5 Abril 2018, 02:32 am
...
Sin embargo, si tengo dos objecciones 'entre humanos' con este algoritmo:
...
...por poner quejas, en la solución que propuse tampoco puse distinción de mayúsculas respecto de minúsculas, se da por sobreentendido... ya que esa no es la raíz del problema que requiere aclaración...

El objetivo del pseudocódigo, es abstraerse de tonterías como la inicialización de variables y cuestiones específicas de tal o cual lenguaje y centrarse en el problema de verdad... se inicializa exclusivamente las variables que sea precisas con el valor que toque, cuando sea distinto del valor por defecto para el tipo de datos...

Hay soluciones para ejercicios, y soluciones, profesionales. Creo que la cuestión tratada, entra en el de 'ejercicio de clase', que típicamente cada año, pondrán algunos profesores a sus alumnos. Si a un alumno, le presentan un problema y le dan un plazo de 2-4 días para entregarlo, carece de sentido que pierda el tiempo tratando de resolver todos los posibles problemas del mundo que se le presenten, porque entonces le faltaría tiempo... (yo le dediqué el tiempo que traté en escribirlo... 5 minutos o así y luego lo repasé levemente...
Se supone que al alumno, se le darán varias frases y deberá demostrar cuantas y cuales son palíndromas, y me temo que no le van a reclamar que el algoritmo solvente el problema en cualquier circunstancia posible (no habrá un botón nuclear que se active si falla) y en la realidad, no existen frases en ningún libro con 420 espacios (ni muchos menos) seguidos tal que deba comprobarse que sea palíndroma y desborde un bucle...




De todas maneras, si se trata de ser quisquilloso, mira como son las cosas... tu algoritmo fallará, con el siguiente palíndromo:

"Es Adán, ya ve yo soy Eva y nada se"

Por qué, por que por lo mismo que tu te sacas de la manga los 420 espacios (que no figuran en ninguna frase razonable), yo me saco de la manga otros signos de puntuación que no son expresamente espacios, como la coma del ejemplo, un punto, un guión, dos puntos, un tabulador en vez de un espacio, etc... y que para el caso tampoco deben contar al considerar un palíndromo.... pero a diferencia de tus quejas, esto si es razonable que se dé en las frases...


p.d.: Tambén me resulta graciosa, esta frase:
De acuerdo. Una puntualización "pedantic" (perdón). Son los 'caracteres no válidos' los que delimitan las palabras dentro de una 'frase'
Yo también estoy de acuerdo...

Cuando creo una función que deba aceptar o rechazar ciertos caracteres, típicamente la llamaré:
       EsCaracterValido(...) ó
       EsCaracterInvalido(...)
Pero no tengo ninguna objección a que tu en tus códigos la llames:
       EsCaracterQueDelimitaLasPalabrasDentroDeUnaFrase(...)

3092  Foros Generales / Noticias / Re: EEUU pedirá los datos de redes sociales y correo electrónico a los .... en: 2 Abril 2018, 16:15 pm
y el que no tenga cuenta en las redes sociales, entonces no puede ingresar a eeuu?
Pués nada... tocará crearse una cuenta y poner 'Hola que ase'... y ya teniendo presencia en una red social, podrás entrar.


La cuestión es que si Trump sale del país... como él mismo tuviera que dar esos datos a inmigración, y chequearan sus redes sociales, creo que no le dejarían entrar en el país... su cuenta si pudiera tener pinta de parecerse a la típica de un troll-terrorista.
3093  Foros Generales / Noticias / Re: Amazon eliminará nuestros MP3 del servicio de almacenamiento de música, qué ... en: 2 Abril 2018, 16:08 pm
Asumo que este 'servicio' era simplemente una estrategia, para conocer los gustos de los usuarios, incluso por zonas geográficas... una vez recopiladas las estadísticas, los datos ya no son necesarios y para ellos supone un estorbo, razón por la cual defnitivamente lo eliminan...

Algo similar a lo que hace Spotify, que te permite tener listas del contenido local de tu propio equipo... Más tarde si un álbum, que ellos no tenían, pasabna tenerlo, ése sustituía al que tuvieras en tu equipo... y en este caso era de asumir que si tú tenías un álbum, que ellos no poseían seguro que s elo descargaban a sus servidores, para poderlo ofrecer a otros que lo buscasen...
3094  Programación / .NET (C#, VB.NET, ASP) / Re: Cifrar variables o textos de forma sencilla. en: 1 Abril 2018, 16:47 pm
Algunas cosas...


1 - Usando el sistema de cifrar usando XOR con un único valor (10 en ese caso), es relativamente sencillo descubrir el sistema. Si en cambio cada carácter en origen se cifra con un valor distinto, no sirve de nada un análisis de frecuencia...
Considera cifrar esta palabra: matematicas
tiene 3 'a', y dos veces se repite 'mat': 'mat' 'e' 'mat' 'i' 'cas'.
matematicas (con XOR 10) = gk~ogk~ciky   'gk~' 'o' 'gk~' 'c' 'iky'
matematicas (con XOR ??) = "PTIzNjs3Jy4wYXM="  siendo ?? resultado de la clave "QWERTYUIOP"
matematicas (con XOR ??) = "DgAZDAMAGh0GQR0="  siendo ?? resultado de la clave "caminante no hay camino"

Como puedes ver en los 2 últimos ejemplos que no usan XOR 10, no hay correspondencia entre caracteres en  la salida con respecto de la entrada... que haya dos veces 'mat', o 3 veces una 'a'... no guarda relación con el resultado en la salida.

Más aún imaginemos que el texto a cifrar es algo más extenso: "las matematicas son muy utiles"

"las matematicas con muy utiles" (con XOR 10) = "fky*gk~ogk~ciky*yed*gs*~cfoy"
Como se ve, la subcadena 'matematicas' se localiza dentro de este nuevo resultado, : "gk~ogk~ciky"  y s elocaliza porque cada carácter a la entrada arroja siempre el mismo resultado a la salida, hay una correspondecia bidireccional muy tangible...

"las matematicas son muy utiles" (con XOR ??) = "RFRaDVxQWUxYYXRcSkxCEV5GWyFtPjJ0Li89Jy5z"  siendo ?? resultado de la clave "QWERTYUIOP", como se aprecia, no se puede localizar correspondencia con la subcadena de 'matematicas' anteriormente cifrada a "PTIzNjs3Jy4wYXM=" no aparece como subcadena dentro de un texto mayor que subcontenga al previo...
Nota que también existe una correspondecia bidireccional (si no no se podría decodificar), pero es intangible. En cuanto cambia el tamaño de la entrada o cambia la clave, el resultaod es totalmente distinto.


2 - Con tu método, al operar con: 'n XOR 10', puede dejarte algunos caracteres no imprimibles... Recuerda que XOR, se comporta como una suma o una resta, dependiendo de los operandos... deja el bit a 1, cuando el número de bits a 1 (en la misma posición) de los operandos es impar, y en otro caso lo deja a 0.
 Para ver claramente lo que te digo prueba esto:
 
Código:
    escribir en consola "Desde: 0 hasta: 15" 
    Bucle para k desde 0 a 255
        escribir en consola en misma linea (k xor 10)  + ", "
        Si (((k+1) and 15) = 0)
               escribir en consola nueva linea
               escribir en consola "Desde: " + k + " hasta: " + (k+15)
        Fin si
    Fin bucle
Si sólo usas caracteres en el contenido de esas variables, desde el espacio hasta el 127 (el siguiente a ~)
Tendrás estas conversiones válidas con 'n XOR 10':
desde: 31 hasta: 47
42, 43, 40, 41, 46, 47, 44, 45, 34, 35, 32, 33, 38, 39, 36, 37,
desde: 47 hasta: 63
58, 59, 56, 57, 62, 63, 60, 61, 50, 51, 48, 49, 54, 55, 52, 53,
desde: 63 hasta: 79
74, 75, 72, 73, 78, 79, 76, 77, 66, 67, 64, 65, 70, 71, 68, 69,
desde: 79 hasta: 95
90, 91, 88, 89, 94, 95, 92, 93, 82, 83, 80, 81, 86, 87, 84, 85,
desde: 95 hasta: 111
106, 107, 104, 105, 110, 111, 108, 109, 98, 99, 96, 97, 102, 103, 100, 101,
desde: 111 hasta: 127
122, 123, 120, 121, 126, 127, 124, 125, 114, 115, 112, 113, 118, 119, 116, 117,


3 - Al margen de eso, cifrar como quieres se trata simplemente de obtener un array de bytes (o chars), con los que poder operar partiendo de la matriz, y luego tras el resultado volver a convertir a string de nuevo.

Código
  1.  
  2.            string s = "En un lugar de 'La Mancha', de cuyo nombre no quiero acordarme.";
  3.            string r, t;
  4.  
  5.            s = "las matematicas son muy utiles";
  6.            int k;
  7.            int j = s.Length;
  8.  
  9.            //1- Convertir un string a un array de bytes:
  10.            byte[] Cifrado = Encoding.Default.GetBytes(s);   //o también  ASCIIEncoding.ASCII.GetBytes(s)
  11.  
  12.            // 2- Cifrar el byte[k] con Xor 10:
  13.            for (k = 0; k < j; k++){
  14.                Cifrado[k] = (byte) ( Cifrado[k] ^ 10);
  15.            }
  16.  
  17.            // 3 - Convertir el array de bytes en un string, de nuevo.
  18.            r = Encoding.Default.GetString(Cifrado);  
  19.  


4 - Aunque uses esto de XOR 10, te sugiero que lo metas en una función, y lo pongas como una extensión de método para la clase String, como te indicaba más arriba, así tu antes conviertes los textos deseados, los guardas en un fichero, luego los pegas a tu programa, y luego ya modificas de forma definitiva el programa y en 'main', ´simplemente llamarías al método 'decode', por cada variable, que tengas cifrada:

por ejemplo:
Código
  1. Console.Title = Console.Title.Decode
El contenido de esa función es básicamente las líneas recién adjuntas... 's', sería el parámetro de entrada y 'r' sería un return.
3095  Programación / .NET (C#, VB.NET, ASP) / Re: Cifrar variables o textos de forma sencilla. en: 31 Marzo 2018, 16:13 pm
...y bueno, aprovechando que es sábado y Semana Santa y que por ello tengo un poco de tiempo libre...

No acostumbro a poner código, creo que todo el que reclama algo tiene que entender lo que sele dice y poner de su parte, pero bueno... Tampoco es plan que pongan en duda, lo que uno dice, porque (al menos yo) lo que uno dice debe decirlo con conocimiento, si no es mejor callarse, ó ante la duda preguntar...

El código parte de las líneas que tienes tú, yo simplemente he añadido la extensión de los métodos para los que te señalaba más arriba, corrigiendo en efecto, los pequeños detalles que se escapan cuando escribes al vuelo la idea... esto es, funciona perfectamente.
Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6.  
  7. namespace Encriptar_variable_Consola_01{
  8.    using CustomExtensions;
  9.    class Program{
  10.        static void Main(string[] args){
  11.            string Key = "QWERTYUIOP";
  12.            string s = "En un lugar de 'La Mancha', de cuyo nombre no quiero acordarme.";
  13.            string r, t;
  14.  
  15.            r = s.Code(Key);
  16.            System.Console.WriteLine("El texto original {0} cifrado con la clave {1}, da por resultado {2}", s, Key, r);
  17.            Console.WriteLine();
  18.            t = r.Decode(Key);
  19.            System.Console.WriteLine("...y vuelta atrás, el texto cifrado {0} con la clave {1}, nos devuelve al origen {2}", r, Key, t);
  20.  
  21.            Console.WriteLine();
  22.            Console.ForegroundColor = ConsoleColor.Yellow;
  23.            System.Console.WriteLine("Se comprueba que 's' = 't' {0} = {1}", s, t);
  24.            Console.ForegroundColor = ConsoleColor.White;
  25.  
  26.  
  27.  
  28.  
  29.  
  30.            Console.WriteLine();  
  31.            //Console.Title = "Ocultar variable"; // Título de la pantalla.
  32.            Console.Title = "Ocultar variable".Code(Key) ;  
  33.            //string variable = "Esto es una prueba.";
  34.            string variable = "Esto es una prueba.".Code(Key) ;
  35.            Console.WriteLine(variable);
  36.            //Console.WriteLine("Otra prueba.");
  37.            Console.WriteLine("Otra prueba.".Code(Key) );
  38.  
  39.            Console.WriteLine();
  40.            Console.ForegroundColor = ConsoleColor.Red;
  41.            Console.WriteLine("Pulse una tecla y observa como cambia el título de la consola a su estado decodificado...");
  42.            Console.ReadKey();
  43.            Console.Title = Console.Title.Decode(Key);
  44.  
  45.            Console.WriteLine("Pulse cualquier tecla para salir.");
  46.            Console.ReadKey();
  47.        }
  48.    }
  49. }
  50.  
  51.  
  52. namespace CustomExtensions{
  53.    //Los métodos extendidos, deben ser definidos como una clase estática.
  54.    public static class StringExtension    {        
  55.        public static string Code(this String ElTexto, String LaClave){
  56.            byte[] Cifrado = Encoding.UTF8.GetBytes(ElTexto);
  57.            byte[] Key = Encoding.UTF8.GetBytes(Ampliar(LaClave, Cifrado.Length));
  58.            byte k;
  59.  
  60.            for (k=0; k< Cifrado.Length; k++){
  61.                Cifrado[k] = (byte)(Cifrado[k] ^ Key[k]);
  62.            }
  63.  
  64.            return Convert.ToBase64String(Cifrado);
  65.        }
  66.  
  67.        public static string Decode(this string Cifrado, String LaClave){
  68.            byte[] Cif = Convert.FromBase64String(Cifrado);            
  69.            byte[] Key = Encoding.UTF8.GetBytes(Ampliar(LaClave, Cif.Length));
  70.            byte k;
  71.  
  72.            for (k = 0; k < Cif.Length; k++){
  73.                Cif[k] = (byte)(Cif[k] ^ Key[k]);
  74.            }
  75.            return Encoding.UTF8.GetString(Cif);
  76.        }
  77.  
  78.        private static string Ampliar(string Key, int Minimo){
  79.            int k, j, i;
  80.  
  81.            byte[] yeK = Encoding.UTF8.GetBytes(Key);
  82.            k = yeK.Length;
  83.            j = (k-1);
  84.            byte[] tmp= new byte[k];
  85.  
  86.            while (k < Minimo){
  87.                k = (k * 2);
  88.                Array.Resize(ref tmp, k); //redimensionar tmp(0 a k)
  89.                //' El byte primero es la media de los extremos, luego entre el 2ª y el penúltimo, luego entre el 3º y el antepenúltimo...
  90.                //' el byte último es un xor entre los extremos, luego entre el 2ª y el penúltimo, luego entre el 3º y el antepenúltimo...
  91.                //' es muy simple, pero puede complicarse todo lo que quieras... y para lo que necesitas es suficiente.
  92.                for (i = 0; i < j; i++) {
  93.                    tmp[i] = (byte) ((yeK[i] + yeK[j-i] ) >> 1) ;
  94.                    tmp[k-1-i] = (byte) (yeK[i] ^ yeK[j-i]);
  95.                }
  96.                //' Se puede complicar más con otras fases: 2,3,4 alterando la forma o la forma en que los índices se conjugan.
  97.  
  98.                yeK = tmp; //' asignamos un array al otro...
  99.                j = (k - 1);
  100.            }
  101.            return Encoding.UTF8.GetString(yeK);
  102.        }
  103.    }
  104. }
  105.  

NOTAS:
A --- Yo tengo el VS-2010, puede que para una versión más actual, pueda requerir algún cambio, el propio entorno, ya te sugerirá si algo es obsoleto o incluso si no lo reconoce.... por ejemplo los métodos Getbytes, GetString, podrían estar desplazados respecto de UTF8.
B --- Nunca ha manejado una versión 'Comunity', solo versiones Enterprise y Profesional, por lo que ignoro las limitaciones de las versiones Comunity, supongo que para algo tan sencillo, no deba afectarle.
C --- Fíjate en el detalle de importar el namespace, concretamente en la línea: using CustomExtensions;
D --- Al final me he mantenido firme (al pseudocódigo que puse) y he dejado el cifrado con XOR, aparte de codificar con Base64.
E --- Para probarlo y entenderlo bien, ejecútalo paso a paso (tecla F11).
F --- He añadido bastante 'verbosidad', en main, para reflejar el uso de los métodos Code y Decode.
G --- p.d.: Personalmente acostumbro a abrir las llaves en la línea previa, por lo que no estando acostumbrado pueda dar la impresión de que 'falta algo'... cuestión de gustos, solamente...
H --- ...y por supuesto y para aclarar tus dudas: Es una aplicaicón de consola, la frase tuya:  Me da que usas la idea del Windows form y mi idea es en modo consola.[/i] es irrelevante, aunque yo pusiera en el ejemplo referencias a unos controles textbox, el pseudocódigo es adaptable a ambas situaciones...
I --- Para algo más elegante, incluso la clave (QWERTYUIOP), podría estar cifrada (y ser descifrada, por ejemplo con el nombre del programa, con lo que si alguien lo cambia, 'traducirá' a urliburli), o bien ser pasada como un argumento al programa.
3096  Programación / .NET (C#, VB.NET, ASP) / Re: Cifrar variables o textos de forma sencilla. en: 31 Marzo 2018, 04:29 am
Deja ver si capto lo que cuentas. Con el XOR ^10 me vale y solo quiero eso.

...Me da que usas la idea del Windows form y mi idea es en modo consola.
mmmm... a ver yo leí esto:
Citar
Mi idea era usar algo parecido a esto en XOR ^10 con otro programa que haré aparte.

Es decir, yo entiendo/interpreto que usas ese programa/librería aparte (B)...
1 - Primero para cifrar lo deseado y guardarlo en el ejecutable (A)...
2 - Luego cuando se carga esté 'A', invocar a 'B' para decodificarlo.
Yo veo que cumple perfectamente lo que quieres... (aunque tienes que adaptarlo, es solo un simple ejemplo)

De todos modos, yo ni siquiera usaría un programa/librería aparte, simplemente crearía un par de métodos de extensión, para la clase String (Code, Decode haciendo justo lo que señalo más abajo más arriba) y listo... y si me apuras, ni cifrando con XOR, dejándolo simplemente en Base64, te bastaría...
3097  Foros Generales / Noticias / Re: Google se enfrenta a una demanda de 9.000 millones por usar Java sin permiso ... en: 30 Marzo 2018, 04:25 am
Google obtiene sus ingresos básicamente de la publicidad.
No cobra al usuario por tener instalado el S.O. Android, tampoco (que yo sepa9, cobra a los fabricantes por instalar Android, si que les obliga a ciertas cuestiones relativas a la seguridad y estabilidad.

Digo yo, entonces que si Google debe pagar, también deberá Oracle demandar a todas esas compañías chinas que han creado un clónico de Android, usando también Java...
3098  Foros Generales / Noticias / Re: Google ha baneado el uso del término ‘Kodi’ en su buscador por piratería en: 30 Marzo 2018, 04:19 am
Chorradas...  :laugh: :laugh: :laugh: :laugh: :laugh:

Uno puede diseñar un sistema para que cuando se censure un término, se use otro... qué tal si ahora en vez de llamarlo "Kodi", lo llamamos "Trump", censurarán la palabra "Trump" o "Putin"????...

"He comprado una caja "Trump", para ver las "Putin"...  :laugh: :laugh: :laugh:
3099  Foros Generales / Noticias / Re: Microsoft lanza una herramienta open source para que cualquiera traiga su ... en: 30 Marzo 2018, 04:16 am
Opino como animanegra, son todos una solemne M135D4...  :laugh: :laugh: :laugh: :laugh: :laugh: :laugh:

Siempre han tenido bugs, pero ahora parecen un termitero viviente...

Antes:





Ahora:



 :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :silbar: :silbar: :laugh: :laugh:
3100  Foros Generales / Noticias / Re: Ahora tienes 14 días para devolver tus apps Android en Google Play Store en: 30 Marzo 2018, 04:02 am
...es que es mejor así, un plazo generoso...

A quién no le ha pasado que se ha bajado una app reciente, le ha gustado bastante y ha decidido adquirir la versión de pago... y a los dos días, una actualización te trae de vuelta los malditos anuncios, por los que supuestamente habías decidido pagar por evitar...
Páginas: 1 ... 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 [310] 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 ... 431
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines