Otra perspectiva para correr el algoritmo de Julio Cesar

Iniciado por Sadam.sh, 30 Octubre 2010, 20:58 PM

0 Miembros y 1 Visitante están viendo este tema.

Sadam.sh

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]
Last resort.

[u]nsigned

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

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!

Sadam.sh

Gracias, no me di cuenta. Así queda mucho mejor. Saludos
Last resort.

.:WindHack:.

Por favor, usa las etiquetas BBCode para resaltado de sintaxis. [code=php][/code]

Follow me on Twitter: @windhack | Visit my website: www.daw-labs.com

"The only thing they can't take from us are our minds."

Shell Root

#4
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
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Sadam.sh

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.
Last resort.

KrossPock

#6
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


[u]nsigned

Otro problema sería la ñ, que al ser PHP americano no etá en el mismo rango ASCII que las demas letras.

Saludos

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!

KrossPock

si... la ñ seria otro problema... solo les mostre que hay otra forma de hacerlo, sin el array, que queda poco dinamico (? :P


Sadam.sh

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.
Last resort.