Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Serapis

#3481
Básicamente hay dos formas:
- Prueba y error (hasta que dé acierto, o te canses)
- Puro analisis (de las claves generadas y del algoritmo que las genera). A veces contienen fallos, nada obvios pero que facilitan resolver claves. Una forma fácil de analizarlas es usar claves en la forma: "AAAAAA", "ABCDEFG", para cifrar conteniedo como AAAAAAAAAAAAA... y ver qué resultado cifrado arroja.
- Mezcla de ambas. Si por análisis puedes deducir ciertas partes, luego una fase de prueba y error puede ser considerablemente más corta.
#3482
Para empezar, C, no me parece el lenguaje más adecuado... lleva una curva de aprendizaje bastante larga.
En general, si vas a aprender por tí mismo, si tras cierto tiempo, no logras avances significativos, es muy fácl que te desmoralice. Como mínimo, empieza con C#, es la misma filosofía, pero con poco puedes tener resultados y esa sensación de comprender, aprender y avanzar te da energía para seguir adelante...

Incluso te recomendaría Visual Basic, para empezar, luego que comprendas algunos fundamentos básicos y logres idear cosas y ver que eres capaz de llevarlas a cabo correctamente, puedes saltar (con más conocimiento), hacia otro lenguaje si lo ves necesario.

Para comenzar, lo ideal es hacerlo con un lenguaje que te enseñe lo básico, sin exigirte demasiado conocimiento previo...
#3483
Vuelta a lo mismo... Qué contiene ese fichero????

Tu problema seguramente yace en el contenido dle fichero, y que se refleja luego aquí:
string[] numbers = Regex.Split(texto, @"\D+");
           foreach (string value in numbers)

foreach ... value = 0 strings?. Seguro que Regex, no devolvió un array vacío???
Al menos saca por consola, qué contiene value, incluso si numbers.lenght es mayor que 0... Son preguntas demasiado tontas, cuya solución deberías ser capaz de resolver por tí mismo.
Visual Studio, es muy potente, tiene muchas facilidades para saber en cada momento, cual es el contenido de cada variable, puedes ejecutar paso a paso, puedes poner puntos de interrupción incondicionales (líneas), o condicionales de modo que cuando se cumpla la condición se pare ahí en ese punto la ejecución... revisas que debiera tener y si es preciso, moverte paso a paso por instrucciones hasta ver dónde ocurre el fallo.

Creo que lo que te pasa es que no conoces ni de lejos el IDE de Visual Studio (examina el menú DEBUG, que sea tu amigo íntimo, más que éste foro, ahí tienes infinidad de respuestas inmediatas), sin mencionar claro está el lenguaje, que ahí es natural que no quede todo claro.... pero con las facilidades que ofrece el IDE, encontrar ciertos errores es sumamente fácil...
#3484
Normalmente cuando alguien empieza, ni se explica bien, ni pone código (o pone solo 4 líneas), y suele ser un refrito de tripas revueltas. Así que lo primero es felicitarte, porque no caes en ninguna de esas cuestiones.

De entrada, yo te sugeriría que usaras tu alfabeto 1337 tanto en minúsculas como en  mayúsculas. Es decir:
Tal como tienes:
0 1 2 3 4 5 6 7 8 9
o i  z e  a s g t b p

Pero también:
0 1 2 3 4 5 6 7 8 9
O I Z E A S G T B P

de hecho, mucho mejor si todo el texto quedara en mayúsculas, pero bueno... cuando te funcione ya decidirás...

Lo segundo, es señalarte que hacerlo en la forma de 'Replace', en realidad exige recorrer 10 veces el texto, para hacer el cambio. En cada ocasión recorre todo el texto, buscando cada vez una determinada letra que cambiar.
Si el texto es corto (que es lo habitual), no importa, será tan rápido que no se aprecia  ninguna tardanza. Si el texto fuera largo, o lo haces con muchos ficheros podría ser hasta 10 veces más lento de lo que realmente necesita ser.


Para ello, habría que generar un alfabeto, para traducir de uno a otro sistema:

// Esta función podría llamarse al principio, cuando se crea la clase, que alberga el código (se genera una sola vez, se invoca una sola vez).
Funcion CrearTablasDeTraduccion
    //Primero se hace una equivalencia con el ASCII.
    Bucle K desde 0 a 255
       AlfabetoToLeetSpeak(k) = k
       AlfabetoFromLeetSpeak(k)= k
    Fin bucle

    //Luego se hacen los cambios que proceden (manualmente), yo pongo el cambio para 3 caracteres, tu completa el cambio para los 7 restantes...
   AlfabetoToLeetSpeak(111)=48 ' o =0
   AlfabetoToLeetSpeak(79)=48 ' O = 0

   AlfabetoToLeetSpeak(105)=49 ' i =1
   AlfabetoToLeetSpeak(73)=49 ' I = 1

   AlfabetoToLeetSpeak(122)=50 ' z =2
   AlfabetoToLeetSpeak(90)=50 ' Z = 2
  .... resto de letras asignarles desde 3-9

    // Y la traducción de vuelta, es intercambiar los valores previos, elegimos números por mayúsculas, es imposible regresar de números a myúsculas y minúsculas al mismo tiempo, tal como estaban en origen, hay que decantarse y lo hacemos por mayúsculas, porque se parecne más a los números que las minúsculas.
   AlfabetoFromLeetSpeak(48)=79 ' 0 =O

   AlfabetoFromLeetSpeak(49)=73 ' 1 = I

   AlfabetoFromLeetSpeak(50)=90 ' 2 =Z
  .... resto de letras asignarles desde 3-9
Fin funcion

NOTA: que yo solo he puesto la traducción para 3 caracteres, te falta poner las de los otros 7 restantes...


Luego ya se puede usar la tabla (que proceda) en una funcion de traducir.

// Una enumeración para señalar la dirección de traduccion (podría ser remplazado por un valor buleano, eso al gusto, lo dejo así por más claridad).
Enumeracion TipoDeTraduccion
   TraducirALeetSpeak = 0
   TraducirDeLeetSpeak = 1
Fin enumeracion

Funcion Traducir(Texto tipo String, Alfabeto tipo TipoDeTraduccion) Devuelve String // o un array de bytes, según se precise.
    ArrayTexto() tipo Array
    ArrayTexto= Convertir(Texto a bytearray)

    Si Alfabeto = TraducirALeetspeak entonces
        Bucle k desde 0 a ArrayTexto.Longitud
            ArrayTexto(k)= AlfabetoToLeetSpeak(ArrayTexto(k))
        fin bucle
    si no // Tradicr desde LeetSpeak
         Bucle k desde 0 a ArrayTexto.Longitud
            ArrayTexto(k)= AlfabetoFromLeetSpeak(ArrayTexto(k))
        fin bucle
     fin si
     Devolver Convertir(ArrayTexto a String) //no es absolutamente necesario La conversión) si se va a guardar a fichero, al fichero se escriben bytes, poco le importa que tu lo consideres string, char o bytes...
fin funcion


-----------------------

Y ahora mirando tú código... qué falla?.

Bueno falla que tu lees una línea de código, la conviertes y nada más convertirla la escribes a UN NUEVO FICHERO Cada VEZ.
Lo que debes hacer primero es crear el fichero de salida, y luego simplemente es mandar escribir al final del fichero, es decir la acción es APPEND (añadir al final), tu sobrescribes el mismo fichero con cada línea que lees y traduces del origen, y lo cierras con cada vez.
Cuando escribas todas las líneas, (es decir al final del bucle de lectura), es cuando debes cerrar el fichero de escritura.

Por tanto tus pasos (simplificados), serían:
Funcion Traducir(FicheroOrigen, otrosparametros...)
   Si ficheroOrigen no esta vacío ni presenta otros problemas.
       Abrir fichero de escritura: FileWrite
       Abrir fichero de lectura: FileRead
       Por cada Linea en FileRead: LeerLinea
            LineaWrite = Traducir(Linea, DireccionTraduccion)
            FileWrite.Append(LineaWrite)
       fin Cada
       Cerrar FileWrite
   si no
      advertir al usuario: "el fichero introducido, tiene tal o cual problema"
   fin si
fin funcion


Como ves el código es bien sencillo y claro... ahora tu traduce de pseudocódigo...
No olvides controlar las posibles excepciones. que yo no ponga (casi) nada al respecto, obedece a que puedas verlo y entenderlo con claridad....

No he mirado nada más en tu código (solo por encima) y tras ver ese fallo, asumo que no tienes más... en cualquier caso, corrige/modifica y ya veremos si tienes más fallos.
#3485
Seguridad / Re: Como han podido hackearme?
22 Mayo 2017, 02:21 AM
Entonces es muy probable que tengas un troyano con keylogger incluído...
Actualiza tu antivirus, luego corta la conexión y pasa toda la batería antivírica que tengas instalado. Si no encuentra nada, es probable que debas usar otras herramientas (ningún antivirus es eficaz al 100%, intenta con otros, si no quieres instalar y desintalar otros, también los hay online.

Si a pesar de todo sigue sin encontrar nada, pásate por el foro http://www.forospyware.com/ allí pueden ayudarte, sigue sus indicaciones para dejar completamente limpio tu PC (incluso si tu antivirus encuentra algo, sigue siendo buena idea visitar el foro y pedir que te ayuden a limpiarlo bien de infecciones, di que sospechas que tienes un troyano dentro, por la cuestión del robo de tu clave...)
#3486
Una macro son acciones ejecutables preestablecidas.
Si paras el vídeo hacia el crono: 1'21, podrás ver parte del código de la macro.

Aquí tienes la especificación de word, y otros formatos de Office (la descarga de todos, última versión son 82Mb.):
https://msdn.microsoft.com/en-us/library/office/cc313153(v=office.12).aspx
#3487
Quita la tilde a la "a" en "cuántico" y funcionará el enlace...

Que, qué se puede hacer con 16Qubits?. Pués probar que funciona bien y servir de base para ir mejorando.

Una nave espacial no se construyó de la nocha a la mañana, primero, se empezó con las alas de cera de Ícaro... (quién sabe si fue algo más que mitología), y hasta los hermanos Mongolfier con su globo, o los Wright con su aeroplano, ha llovido mucho... luego se ha corrido más en muy poco tiempo.
Así suele suceder con todo, al principio los pasos son lentos y cortos, cuando se empieza a conocer como funciona y la tecnología da para construirlo, es cuando se produce una expansión rápida y dilatada.
#3488
Seguridad / Re: Como han podido hackearme?
21 Mayo 2017, 21:47 PM
No solo uede ser que hayas entrado desde un cyber (por ejemplo), también podría ser que tu contraseña sea la típica 123456, o el nombre de tu perro?
#3489
ASM / Re: Ejercicio ensamblador
21 Mayo 2017, 18:37 PM
Un número negativo, es una convención de acuerdo.
Aunque pueden proveerse diferentes formas de usar números negativos, al comienzo del diseño de la lógica del hardware, se vio claro que:
x - x = 0
0 - 1 = -1
-1 + 2 =1
1 - 1 = 0
Luego en binario debería ser igual... entonces se encontró que la forma de hacelro igual es que el último bit (el de más peso), tiene la función asignada del signo.
Así, éste valor: 1111.1111 puede significar 2 valores
si no admite números negativos es 255, pero si es un número negativo, será -1
Por tanto que sea positivo o negativo, depende del tipo de datos declarado. Sin más datos al respecto (por ejemplo podríamos estar trabajando con datos BCD) lo más que se puede hacer es verificar el bit de más peso.

Hay varias maneras... una podría ser haciendo desplazamiento (o rotaciones) a la izquierda (multiplicar por 2) y consultar luego el banderín de Acarreo (incluso el de desbordamiento). Si hubo acarrero, es porque es ebit estaba a 1, por tanto es negativo.
Código (asm) [Seleccionar]

MOV al, Valor
SAL al, 1  <--- desplazamiento aritmetico a la izquierda (1bit)
JC Negativo
  --> Es positivo
RET
Negativo:
  --> Es negativo
RET


También se puede hacer con RCL, RCR, ROL y ROR, pero tienes que controlar que contiene previamente el acarrero. en cualquier caso, el registro afectado (al), queda modificado... Estudia el comportamiento (condiciones) de los banderines de acarreo y desbordamiento en este tipo de operaciones: Rotaciones y Desplazamientos.

Otra forma es comparar el bit 7 del valor con un valor inmediato que tiene ese bit a 1 y el resto a 0, es decir con 128
Código (asm) [Seleccionar]

MOV al, Valor
TEST al, 128 <--- ¿Esta activado el bit 7 del registro 'al'?
JNZ Negativo
  --> Es positivo
RET
Negativo:
  --> Es negativo
RET


El segundo método es superior, por su sencillez. La ventaja del 2º método sobre el primero, es que el 2º, no modifica el estado del registro 'al', en el 1º, se ha multiplicado por 2 y como operamos con un byte, si era negativo, el valor queda truncado (el valor de ese bit se conserva en el banderín, por si se precisa).

Para devolver una llamada a una función usas RET x (Retorno, Return, x es un parámetro opcional que se suma al registro SP, para descartar parámetros de llamada), y para Salir, se usan directivas end: END, END modulo, ENDM para fin de una macro... etc... esto puede variar ligeramente según el ensamblador usado, pero varían poca cosa entre sí.
Código (asm) [Seleccionar]
ProcA Proc FAR
...
...
Ret
ProcA ENDP <---- fin del procedmientoA

#3490
Conectar cada aparato electrónico a Internet, nos hará más esclavos de lo que ya somos...

En razonable que determinadas cosas conectadas a Internet, facilitarán muchísimo las cosas, pero no veo ningún motivo para conectar una cafetera a Internet. Ya sé, que el vendedor (que por ello reclamará 10 veces lo que cuesta una cafetera sin conexión a internet, y ahí radica todo su interés), te dirá que así cuando se acabe el café, puede ahcer el pedido por tí... Incluso así, sería más fácl que la cafetera, simplemente se conectara a tu móvil y pusiera en tu lista de la compra: café = cero patatero... no hace falta nada más... tampoco hace falta que desede internet se controle la temeperatura o el tiempo que ha de estar la cafetera encendida, de verdad que no...

Ya me veo en un futuro no muy lejano, 'enjaulando' todos los dispositivos electrónicos caseros que NO NECESITAN ninguna conexión a Internet para absolutamente nada.