FANDOM


La 5ta clase fue realmente muy práctica. Desde que llegamos, luego de una anécdota del maestro, nos pusimos a trabajar con el lenguaje Ruby. Lo primero que vimos fue como imprimir el Ruby, lo cual lo podemos hacer de varias maneras de las cuales el maestro mencionó dos.

Puts “hola mundo” #imprime hola mundo con un salto de línea
Print “hola mundo” #imprime hola mundo sin salto de línea


Para hacer que print haga lo mismo que el puts, bastaría con añadir el código de salto de línea en el mensaje, este quedaría así:

Print “hola mundo\n”

Luego de esto, el maestro explicó como se construían ciclos en Ruby, para pasar a la primera práctica, la cual era realizar un programa que generara un número aleatorio entre 1 y 100 y diera 3 oportunidades para adivinarlo. He aquí el código:

puts "------------------------------------------------------"
puts " Programa que adivina un numero en ruby"
puts "------------------------------------------------------"
control="a"
numero = rand(100)
for i in 1..3
     puts "Introduzca el numero (intento no. #{i}-->>"
     numeroa = gets.chomp
     if (numeroa == numero)
       puts "Haz adivinado el numero era #{numero}"
       control="b"
       break
     else
      if (numeroa.to_i > numero)
          puts "el numero es mayor \n"
       else
          puts "el numero es menor \n"
       end
      puts "\n Intentelo de nuevo\n"
     end
end
if control ="a"
   puts "\n Usted ha fallado el numero era #{numero}"
  end
puts "------------------------------------------------------"
puts " PROGRAMA FINALIZADO.. "
puts "------------------------------------------------------\n \n"

Luego de esto el profesor dijo que hiciéramos un programa en ruby que imprimiera una cadena dada en orden alfabético. Esto se puede hacer de varias maneras de las cuales pondremos 2. 


puts "------------------------------------------------------"
puts " Programa que ordena un string alfabeticamente"
puts "------------------------------------------------------"
puts "\nEscriba el string a ordenar"
cadena = gets.chomp
for i in 'a'..'z'
    for n in 0..cadena.size - 1
       if cadena[n] == i
          print i
       end
    end
end

Esta primera forma consiste en hacer un ciclo que recorra desde la A hasta la Z, y dentro de este otro ciclo q recorra las posiciones de la cadena dada, para así ir preguntando si la letra actual está en alguna posición de la cadena, si es así se imprime. Con esto notamos el poder de Ruby, el cual incluso puede hacer ciclos no solo con números enteros lo cual nos da una gran libertad.


puts "Escriba la cadena ----->> "
prueba = gets.chomp
puts "cadena invertida----------->>> "
print prueba.split(//).sort.join

Esta segunda forma es más corta, pues utilizamos las librerías de ruby para hacer todo el trabajo en una simple línea de código.

  • Split: divide la cadena en un arreglo
  • Sort: ordena un arreglo alfabéticamente
  • Join: convierte un arreglo en cadena.

Método de cifrado con XOREditar

¿ Que es la Criptografía ? Según la RAE, la criptografía, es el “Arte de escribir con clave secreta o de un modo enigmático” y cifrar es “Transcribir en guarismos, letras o símbolos, de acuerdo con una clave, un mensaje cuyo contenido se quiere ocultar” (un guarismo es algo referente a números). Bien, en otras palabras en caso de hablar de textos, transformar un texto claro a un texto cifrado, de forma que solamente quien tenga la clave pueda descifrarlo.


La criptografía sirve para muchas cosas, de hecho seguramente mucha gente la ha usado sin darse cuenta. Por ejemplo para loguearse en las cuentas de correo... o al realizar compras por Internet se utilizan métodos criptográficos avanzados, específicamente criptografía asimétrica. Pero, como su definición lo dice, nos sirve para ocultar mensajes.


Criptografía Simetría La criptografía simetría o de clave privada consiste en tener un texto claro y una clave, estos generan un texto cifrado. Para descifrarlo vamos a necesitar el texto cifrado y la clave con la cual se cifró.

XOR ( O-Exclusivo ) es una compuerta lógica y tiene la particularidad que si a un bit A al aplicar XOR con un bit B obtenemos C, con este bit C resultante aplicando un XOR con el bit B volvemos a obtener A nuevamente. Veamos un ejemplo, primero la tabla XOR:


Xor-table

Supongamos que tenemos el texto claro A (0010) y la clave B (1010) siguiendo la tabla anterior, aplicando el primer bit de A XOR con el primero de B, el segundo de A XOR con el segundo de B..., obtenemos el texto cifrado C (1000). Bien ahora para obtener el texto claro aplicamos C XOR B: (1000) XOR (1010) = (0010), esto último ¡es igual a A!.

Este método tiene una vulnerabilidad, si alguien conoce parte del texto claro (por ejemplo conociendo las palabras más frecuentes del idioma o conociendo el header de algún tipo de archivo), puede obtener la clave y de esta forma obtener todo el texto claro. También si conoce el tamaño de la clave puede hacer un análisis de frecuencia y así obtener la clave.