Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Sadam.sh en 30 Octubre 2010, 20:58 pm



Título: Otra perspectiva para correr el algoritmo de Julio Cesar
Publicado por: Sadam.sh en 30 Octubre 2010, 20:58 pm
Julio Cesar enviaba mensajes a sus legiones cifrando los mensajes mediante el
siguiente algoritmo:
Se escogía un número n como clave y se sumaba a cada letra en el alfabeto n
posiciones. Así, si la clave escogida fuese 5, la ‘a’ pasaría a ser la ‘f’, mientras que
la ‘f’ pasaría a ser la ‘k’. Para las últimas letras del abecedario se seguiría desde el
principio. Así, con la clave de 5 la ‘y’ pasaría a ser la ‘d’

Otra perspectiva para el algoritmo de Julio Cesar para PHP
Código
  1. [code]<?php
  2. //Recuerda que aquí no dejo el formulario HTML
  3. $mensaje=$_POST['mensaje'];
  4. $n=$_POST['n'];
  5. $julio=array(
  6.        a=>"0",
  7.        b=>"1",
  8.        c=>"2",
  9. d=>"3",
  10.        e=>"4",
  11.        f=>"5",
  12.    g=>"6",
  13.        h=>"7",
  14.        i=>"8",
  15. j=>"9",
  16.        k=>"10",
  17.        l=>"11",
  18. m=>"12",
  19.        n=>"13",
  20.        ñ=>"14",
  21.    o=>"15",
  22.        p=>"16",
  23.        q=>"17",
  24.    r=>"18",
  25.    s=>"19",
  26.        t=>"20",
  27.        u=>"21",
  28. v=>"22",
  29. w=>"23",
  30. x=>"25",
  31.    y=>"25",
  32. z=>"26");
  33. $cesar=array(
  34.        0=>"a",
  35.        1=>"b",
  36.        2=>"c",
  37. 3=>"d",
  38.        4=>"e",
  39.        5=>"f",
  40.    6=>"g",
  41.        6=>"h",
  42.        7=>"i",
  43. 9=>"j",
  44.        10=>"k",
  45.        11=>"l",
  46. 12=>"m",
  47.        13=>"n",
  48.        14=>"ñ",
  49.    15=>"o",
  50.        16=>"p",
  51.        17=>"q",
  52.    18=>"r",
  53.    19=>"s",
  54.        20=>"t",
  55.        21=>"u",
  56. 22=>"v",
  57. 23=>"w",
  58. 24=>"x",
  59.    25=>"y",
  60. 26=>"z");
  61. echo "Mensaje original: ".$mensaje."<br>";
  62. echo "Mensaje codificado: <br>";
  63. for($i=0;$i<strlen($mensaje);$i++)
  64. {
  65.  $cifrado=(($julio[$mensaje[$i]] + $n))%27;
  66.  echo $cesar[$cifrado];
  67.  }
  68.  
  69.  
  70. ?>
[/code]


Título: Re: Otra perspectiva para correr el algoritmo de Julio Cesar
Publicado por: [u]nsigned en 31 Octubre 2010, 02:04 am
Podes reemplazar:

Código
  1. $cesar=array(
  2.        0=>"a",
  3.        1=>"b",
  4.        2=>"c",
  5.      3=>"d",
  6.        4=>"e",
  7.        5=>"f",
  8.       6=>"g",
  9.        6=>"h",
  10.        7=>"i",
  11.      9=>"j",
  12.        10=>"k",
  13.        11=>"l",
  14.      12=>"m",
  15.        13=>"n",
  16.        14=>"ñ",
  17.       15=>"o",
  18.        16=>"p",
  19.        17=>"q",
  20.       18=>"r",
  21.       19=>"s",
  22.        20=>"t",
  23.        21=>"u",
  24.      22=>"v",
  25.      23=>"w",
  26.      24=>"x",
  27.       25=>"y",
  28.      26=>"z");
   

por

Código
  1. $cesar = array_flip($julio);

Esta buena la implementacion

Saludos


Título: Re: Otra perspectiva para correr el algoritmo de Julio Cesar
Publicado por: Sadam.sh en 31 Octubre 2010, 02:59 am
Gracias, no me di cuenta. Así queda mucho mejor. Saludos


Título: Re: Otra perspectiva para correr el algoritmo de Julio Cesar
Publicado por: .:WindHack:. en 31 Octubre 2010, 04:01 am
Por favor, usa las etiquetas BBCode para resaltado de sintaxis. [code=php][/code]


Título: Re: Otra perspectiva para correr el algoritmo de Julio Cesar
Publicado por: Shell Root en 31 Octubre 2010, 15:39 pm
Pwned, cuando se ingresa una mayúscula. XD
Código:
Mensaje original: Shell
Mensaje codificado: PHP Notice:  Undefined index: S in /home/alex/Escritorio/PoC.php on line 65
elPHP Notice:  Undefined offset: 8 in /home/alex/Escritorio/PoC.php on line 66

Otra opción podría ser,
Código
  1. # @Algoritmo Julio Cesar
  2. # @Shell Root
  3.  
  4. $sMsg = 'Shell Root';
  5. $sMsg = strtolower($sMsg);
  6. $sNumber = 28;
  7. $sEncryption = 'abcdefghijklmn&#241;opqrstuvwxyz';
  8.  
  9. echo "Cadena Original: ".$sMsg."\n";
  10. echo "Cadena Cifrada: ";
  11. for($i=0;$i<strlen($sMsg);$i++){
  12. if($sMsg[$i] == ' '){ echo " "; }
  13. for($j=0;$j<strlen($sEncryption);$j++){
  14. if($sMsg[$i] == $sEncryption[$j]){
  15. echo $sEncryption[$j + $sNumber % 27];
  16. }
  17. }
  18. }
  19.  
  20. echo "\n";

Resultado,
Código
  1. alex@shellroot:~/Escritorio$ php PoC.php
  2. Cadena Original: shell root
  3. Cadena Cifrada: tifmm sppu


Título: Re: Otra perspectiva para correr el algoritmo de Julio Cesar
Publicado por: Sadam.sh en 31 Octubre 2010, 17:58 pm
Si, tampoco cifra caracteres especiales. Esa sería la opción para agregarle más funcionalidades al código. Lo de las mayúsculas y minúsculas, es relativo. Podes darle un valor de asignación diferentes a las mayúsculas o simplemente usar la función

Código

y convertir todo tu mensaje a minúscula. En la consigna original, el problema trata solo caracteres del alfabeto, pero estaría bueno agregar lo de los caracteres especiales. Saludos.


Título: Re: Otra perspectiva para correr el algoritmo de Julio Cesar
Publicado por: KrossPock en 31 Octubre 2010, 18:12 pm
otra forma mas facil....

Código
  1. <?php
  2. $x= "a";
  3. $x++;
  4. echo $x;
  5. ?>

boludeando descubri eso e hice esta funcion...

Código
  1. <?php
  2. function cesar($cadena,$desplazamiento){
  3. if(!is_numeric($desplazamiento)){
  4.   return FALSE;
  5. }
  6. $cifrado='';
  7. $i=0;
  8. while(strlen($cadena)>$i){
  9. $x=0;
  10. $a=substr($cadena,$i,1);
  11. while($desplazamiento>$x){
  12.  $a++;
  13.  $x++;
  14. }
  15. $cifrado.=$a;
  16. $i++;
  17. }
  18. return $cifrado;
  19. }
  20. ?>
  21.  
el unico problema es que haciendo $x++ funciona, pero $x-- no, asi que cifra, pero no decifra xD.

De esta forma cifra mayusculas, minuscula, numeros y a los caracteres especiales me parece los deja como esta


Título: Re: Otra perspectiva para correr el algoritmo de Julio Cesar
Publicado por: [u]nsigned en 31 Octubre 2010, 18:16 pm
Otro problema sería la ñ, que al ser PHP americano no etá en el mismo rango ASCII que las demas letras.

Saludos


Título: Re: Otra perspectiva para correr el algoritmo de Julio Cesar
Publicado por: KrossPock en 31 Octubre 2010, 18:20 pm
si... la ñ seria otro problema... solo les mostre que hay otra forma de hacerlo, sin el array, que queda poco dinamico (? :P


Título: Re: Otra perspectiva para correr el algoritmo de Julio Cesar
Publicado por: Sadam.sh en 31 Octubre 2010, 18:27 pm
si... la ñ seria otro problema... solo les mostre que hay otra forma de hacerlo, sin el array, que queda poco dinamico (? :P

Hay cosas que requieren cierta dinamicidad y hay cosas que no, como por ejemplo un alfabeto. En 500 o 1000 años es muy poco probable que agregue o quite 1 carácter. Tambien podes hacer uso de las correspondencias ASCII, si no te parece conveniente usar un arreglo.


Título: Re: Otra perspectiva para correr el algoritmo de Julio Cesar
Publicado por: .:WindHack:. en 31 Octubre 2010, 19:46 pm
También se podría hacer de la siguiente manera:

 
Código
  1.       <?php
  2.        # Cifrado Cesar
  3.        # .:WindHack:.
  4.  
  5.        $Msg = "Hola Mundo";
  6.        $Key = 3;
  7.        $Temp = "";
  8.  
  9.        for ($i=0;$i<strlen($Msg);$i++)
  10.             $Temp .= chr(ord($Msg[$i])+$Key);
  11.  
  12.        $Temp = str_replace("#"," ",$Temp);
  13.  
  14.        echo "Cadena Cifrada: $Temp";
  15.        echo "Cadena Original: $Msg";
  16.        ?>

Código:
Cadena Cifrada: Krod Pxqgr 
Cadena Original: Hola Mundo