Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => 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 (php) [Seleccionar]
[code]<?php
//Recuerda que aquí no dejo el formulario HTML 
$mensaje=$_POST['mensaje'];
$n=$_POST['n'];
$julio=array( 
        
a=>"0"
        
b=>"1"
        
c=>"2",
d=>"3"
        
e=>"4"
        
f=>"5",
    g=>"6"
        
h=>"7"
        
i=>"8",
j=>"9"
        
k=>"10"
        
l=>"11",
m=>"12"
        
n=>"13"
        
ñ=>"14",
    o=>"15"
        
p=>"16"
        
q=>"17",
    r=>"18",
    s=>"19"
        
t=>"20"
        
u=>"21",
v=>"22",
w=>"23",
x=>"25",
    y=>"25",
z=>"26");
$cesar=array( 
        
0=>"a"
        
1=>"b"
        
2=>"c",
3=>"d"
        
4=>"e"
        
5=>"f",
    6=>"g"
        
6=>"h"
        
7=>"i",
9=>"j"
        
10=>"k"
        
11=>"l",
12=>"m"
        
13=>"n"
        
14=>"ñ",
    15=>"o"
        
16=>"p"
        
17=>"q",
    18=>"r",
    19=>"s"
        
20=>"t"
        
21=>"u",
22=>"v",
23=>"w",
24=>"x",
    25=>"y",
26=>"z");
echo 
"Mensaje original: ".$mensaje."<br>";
echo 
"Mensaje codificado: <br>";
for(
$i=0;$i<strlen($mensaje);$i++)
{
  
$cifrado=(($julio[$mensaje[$i]] + $n))%27;
  echo 
$cesar[$cifrado];
  }
  
  
?>
[/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 (php) [Seleccionar]
$cesar=array(
        0=>"a",
        1=>"b",
        2=>"c",
      3=>"d",
        4=>"e",
        5=>"f",
       6=>"g",
        6=>"h",
        7=>"i",
      9=>"j",
        10=>"k",
        11=>"l",
      12=>"m",
        13=>"n",
        14=>"ñ",
       15=>"o",
        16=>"p",
        17=>"q",
       18=>"r",
       19=>"s",
        20=>"t",
        21=>"u",
      22=>"v",
      23=>"w",
      24=>"x",
       25=>"y",
      26=>"z");
   

por

Código (php) [Seleccionar]
$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
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 (php) [Seleccionar]
# @Algoritmo Julio Cesar
# @Shell Root

$sMsg = 'Shell Root';
$sMsg = strtolower($sMsg);
$sNumber = 28;
$sEncryption = 'abcdefghijklmnñopqrstuvwxyz';

echo "Cadena Original: ".$sMsg."\n";
echo "Cadena Cifrada: ";
for($i=0;$i<strlen($sMsg);$i++){
if($sMsg[$i] == ' '){ echo " "; }
for($j=0;$j<strlen($sEncryption);$j++){
if($sMsg[$i] == $sEncryption[$j]){
echo $sEncryption[$j + $sNumber % 27];
}
}
}

echo "\n";


Resultado,
Código (PoC) [Seleccionar]
alex@shellroot:~/Escritorio$ php PoC.php
Cadena Original: shell root
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 (php) [Seleccionar]
strtolower ()

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 (php) [Seleccionar]
<?php
$x
"a";
$x++;
echo 
$x;
?>


boludeando descubri eso e hice esta funcion...

Código (php) [Seleccionar]
<?php
function cesar($cadena,$desplazamiento){
 if(!
is_numeric($desplazamiento)){
   return 
FALSE;
 }
$cifrado='';
$i=0;
while(
strlen($cadena)>$i){
 
$x=0;
 
$a=substr($cadena,$i,1);
 while(
$desplazamiento>$x){
  
$a++;
  
$x++;
 }
$cifrado.=$a;
$i++;
}
return 
$cifrado;
}
?>


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
Cita de: 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

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 (php) [Seleccionar]
       <?php
        
# Cifrado Cesar
        # .:WindHack:.

        
$Msg "Hola Mundo";
        
$Key 3;
        
$Temp "";

        for (
$i=0;$i<strlen($Msg);$i++)
             
$Temp .= chr(ord($Msg[$i])+$Key);
        
        
$Temp str_replace("#"," ",$Temp);
              
        echo 
"Cadena Cifrada: $Temp";
        echo 
"Cadena Original: $Msg";
        
?>


Cadena Cifrada: Krod Pxqgr
Cadena Original: Hola Mundo