Autor Tema: Caesar  (Leído 743 veces)

Phicar

  • :P
  • Administrador
  • Mensajes: 283
  • (1+sqrt(5))/2
    • MSN Messenger - diego_villahacker@hotmail.com
    • Ver Perfil
    • Phicar's Blog
    • Email
Caesar
« : diciembre 16, 2009, 11:32:41 pm »
Bueno vamos a empezar con un cifrado muyyy famoso, lo importante de este cifrado es que se usaba en la antigua roma para cifrar los mensajes, es por sustitucion simple y jugamos con lo siguiente:


Se ingresa un texto cualquiera y una semilla que en este caso sera un numero, ese numero correra la posicion de la letra en cuestion n veces en el alfabeto comun

o sea si se ingresa el texto "A" y la semilla 28 entonces se procede a hacer la suma, la letra A tiene la posicion 0, viendolo desde una maquina se toma cero como la primera posicion....

se suman 0 y la semilla en este caso 28 y el resultado como tiene que estar dentro de el alfabeto entonces se modula o se divide el resultado de la suma sobre la longitud del alfabeto y se toma el residuo como indexo de la nueva letra en su estado cifrado

o sea

28%26 = 2
Caesar("A")="C"

Aca les dejo el Codigo del primer Modulo(Caesar)

Código: (java) [Seleccionar]
/*
Modulo Caesar para RiCrypt

Cifrado por sustitucion usando sumas y restas modulares en el alfabeto
normal.

Phicar
redinfocol.org
phicar@yashira.org
*///package RiCrypt;
public class Caesar{
public static String CharsetMin = "abcdefghijklmnopqrstuvwxyz";
public static String CharsetMay = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static String TxT;
public static int Pos;
/*
Constructor
@params Txt as String sera el txt a cifrar o a descifrar.
        Pos as Integer sera el numero de posiciones a cifrar.
*/
public Caesar(String TxT,int Pos){
this.TxT=TxT;
this.Pos=Pos;
}
/*
Funcion Cifrar
Cifra la cadena de texto introducida en el constructor
bajo el algoritmo Caesar usando una sumatoria modular
de la siguiente manera
(x+y)%p
donde x sera el indexo en el alfabeto de la letra en
cuestion, y sera la posicion o semilla introducida
en el algoritmo y p sera la longitud del alfabeto.
*/
public static String Cifrar(){
String Cifrado = "";
for(int n = 0;n<TxT.length();n++){
if((CharsetMin.indexOf(TxT.charAt(n))!=-1)||(CharsetMay.indexOf(TxT.charAt(n))!=-1))
Cifrado+=(CharsetMin.indexOf(TxT.charAt(n))!=-1)?CharsetMin.charAt(((CharsetMin.indexOf(TxT.charAt(n)))+Pos)%CharsetMin.length()):CharsetMay.charAt((CharsetMay.indexOf(TxT.charAt(n))+Pos)%CharsetMay.length());
else
Cifrado+=TxT.charAt(n);
}
return Cifrado;
}
/*
Funcion DesCifrar
DesCifra el texto cifrado introducido en el constructor
bajo el algoritmo Caesar usando una resta modular
de la siguiente manera
(x-y)%p
donde x sera el indexo en el alfabeto de la letra en
cuestion, y sera la posicion o semilla introducida
en el algoritmo y p sera la longitud del alfabeto.
*/

public static String DesCifrar(){
String DesCifrado = "";
for(int n = 0;n<TxT.length();n++){
if((CharsetMin.indexOf(TxT.charAt(n))!=-1)||(CharsetMay.indexOf(TxT.charAt(n))!=-1))
DesCifrado+=(CharsetMin.indexOf(TxT.charAt(n))!=-1)?CharsetMin.charAt((CharsetMin.indexOf(TxT.charAt(n))-Pos)%CharsetMin.length()):CharsetMay.charAt((CharsetMay.indexOf(TxT.charAt(n))-Pos)%CharsetMay.length());
else
DesCifrado+=TxT.charAt(n);
}
return DesCifrado;
}
}
« Última Modificación: diciembre 18, 2009, 12:25:50 am por Phicar »
:)

my.opera.com/phicar

[D-m-K]

  • Administrador
  • Mensajes: 229
  • [-.|.-]
    • MSN Messenger - d4rk.m0nk3y@hotmail.com
    • Ver Perfil
    • Red Informatica Colombiana
    • Email
Re: Caesar
« Respuesta #1 : diciembre 18, 2009, 02:19:44 am »
Quetal gente!, bueno esta es la clase en PHP que realiza el cifrado/Descifrado. Aclaro que esta Cifra tambien es muy conocida como ROT13, donde se traspone cada caracter con la semilla 13. Este c
« Última Modificación: diciembre 23, 2009, 12:00:09 pm por [D-m-K] »
:: Todas las grandes cosas que se disfrutan son el producto de las pequeñas cosas que se logran ::

[D-m-K]

  • Administrador
  • Mensajes: 229
  • [-.|.-]
    • MSN Messenger - d4rk.m0nk3y@hotmail.com
    • Ver Perfil
    • Red Informatica Colombiana
    • Email
Re: Caesar
« Respuesta #2 : diciembre 18, 2009, 10:51:31 am »
Implementacion de la cifra de Caesar :P

Código: (php) [Seleccionar]
<?php
include 'Caesar.php'; //Incluyo la clase
$mensaje   $_POST['mensaje']; //Mensaje a cifrar
$semilla   $_POST['semilla']; //Semilla o cantidad de rotaciones al mensaje
$tarea     $_POST['tarea']; //Boton pulsado por el usuario
$salida    ""; //Variable que guarda el mensaje
//Aqui esta la magia
if($_POST && $mensaje != "" && $semilla != ""){
//CIFRADO DEL MENSAJE
if($_POST['tarea'] == "Cifrar"){
$cipher    = new Caesar($mensaje$semilla);
$salida $cipher->encode();
}
//DESCIFRADO DEL MENSAJE
if($_POST['tarea'] == "DesCifrar"){
$cipher    = new Caesar($mensaje$semilla);
$salida $cipher->decode();
}
}
?>

<html>
<head>
<title> .:: Implementacion de la cifra de Caesar ::. </title>
</head>
<body>
<h1>Caesar</h1><hr>
<!-- Datos para el cifrado -->
<form method="post">
<strong>Mensaje a cifrar / descifrar :</strong> <br>
<textarea name="mensaje" style="width:500px;border:1px solid #555"><?php echo $_POST['mensaje']; ?></textarea><br>
<strong>Semilla :</strong>
<input type="text" name="semilla" style="width:30px;border:1px solid #555" value="<?php echo $_POST['semilla']; ?>"> |
<input type="submit" name="tarea" value="Cifrar"> |
<input type="submit" name="tarea" value="DesCifrar">
</form>
<?php
//Muestro el mensaje de salida
if($salida != ""){
echo "<strong> Resultado del criptograma </strong> <br> \n";
echo "<div class='mensaje'>" $salida "</div>";
}
?>

</body>
</html>

Al usar el codigo para cifrar obtienes el siguiente resultado :

Código: [Seleccionar]
  --- Ejemplo ---
   Mensaje Original : ESTE ES UN MENSAJE PARA RIC
   Valor de Semilla : 5
   Mensaje Cifrado : JXYJ JX ZS RJSXFOJ UFWF WNH

Al usar el codigo para DesCifrar obtienes el siguiente resultado :

Código: [Seleccionar]
  --- Ejemplo ---
   Mensaje original : JXYJ JX ZS RJSXFOJ UFWF WNHPARA RIC
   Valor de Semilla : 5
   Mensaje DesCifrado : ESTE ES UN MENSAJE PARA RIC

PTA : Cuando ya existan varios Cifrados elaborados y bien testeados, abrire en la p
« Última Modificación: diciembre 23, 2009, 12:00:42 pm por [D-m-K] »
:: Todas las grandes cosas que se disfrutan son el producto de las pequeñas cosas que se logran ::

Phicar

  • :P
  • Administrador
  • Mensajes: 283
  • (1+sqrt(5))/2
    • MSN Messenger - diego_villahacker@hotmail.com
    • Ver Perfil
    • Phicar's Blog
    • Email
Re: Caesar
« Respuesta #3 : diciembre 19, 2009, 03:11:05 am »
Ahh me fascina, Solido DmK, alguien que se anime a otro lenguaje? ;)

pd: toy haciendo, IDEA, DES,RC4...vamos a ver que sale ;)
:)

my.opera.com/phicar

fulapol

  • Administrador
  • Mensajes: 23
    • Ver Perfil
    • Email
Re: Caesar
« Respuesta #4 : diciembre 22, 2009, 04:26:57 am »
Mi codigo escrito en c++ (para mantener la POO, aunque preferiria C puro), solo tengo que hacer una anotacion, este codigo esta optimizado en el constructor, ya veran porque, y toma en cuenta algo que ustedes no tomaron en cuenta, si quisiera cifrar Z con una semilla de 6 en sus codes que pasaria?

[code=cpp]/************************************************
*  Nombre : Caesar.cpp                          *
*                                               *
*  Cifrado de cesar de sustituci

Phicar

  • :P
  • Administrador
  • Mensajes: 283
  • (1+sqrt(5))/2
    • MSN Messenger - diego_villahacker@hotmail.com
    • Ver Perfil
    • Phicar's Blog
    • Email
Re: Caesar
« Respuesta #5 : diciembre 22, 2009, 02:43:45 pm »
:p tienes razon, lo que pasa es que matematicamente me deberia tomar el negativo en el modulo ;)...

Lo he hecho antes y esta vez se me salio ;), jajaj...

Gracias por notarlo ;)

matematicamente se toma el valor absoluto se modula y se resta, jure que me iba a hacer caso, pero pos como lo planteas en el constructor se da eso ;)

Pd: Espero entiendan mi afan de ser matematico antes que programador, reitero un matematico gana menos ;)
:)

my.opera.com/phicar

[D-m-K]

  • Administrador
  • Mensajes: 229
  • [-.|.-]
    • MSN Messenger - d4rk.m0nk3y@hotmail.com
    • Ver Perfil
    • Red Informatica Colombiana
    • Email
Re: Caesar
« Respuesta #6 : diciembre 23, 2009, 12:01:34 pm »
Observando un poco su forma de programar OO realice unas modificaciones al codigo que lo hacen un poco mas simple de entender e implementar. ;)
:: Todas las grandes cosas que se disfrutan son el producto de las pequeñas cosas que se logran ::

Str4ng3letS

  • E=mc²
  • Administrador
  • Mensajes: 344
  • S-Lozano
    • MSN Messenger - stynky_xp4rky3x@hotmail.com
    • Ver Perfil
    • F1s1c0-H4ck3r
Re: Caesar
« Respuesta #7 : diciembre 27, 2009, 07:48:13 pm »
Pd: Espero entiendan mi afan de ser matematico antes que programador, reitero un matematico gana menos ;)

y un fisico?

Observando un poco su forma de programar OO realice unas modificaciones al codigo que lo hacen un poco mas simple de entender e implementar. ;)

jajaja simpre lo ha hecho asi, ya lo conosco ;)

Apolo

  • Mensajes: 3
    • Ver Perfil
Re: Caesar
« Respuesta #8 : septiembre 27, 2010, 03:23:40 am »
Hola muchachos

Bueno yo codifique el cifrado cesar en lenguaje C, pero me quedo un tipo de mutacion, pues el cifrado cesar comun es el que el desplazamiento lo hace por el abecedario, mi mutacion lo que hace es tener la misma forma de codificar del cifrado cesar solo que lo hace con los 255 caracteres ASCII, aun tiene varios problemas que no les he hallado solucion (como cifrar 2 cadenas de caracteres por ejemplo me cifra POLLO pero voy a cifrar POLLO FRITO no me deja la unica forma es hacerlo asi POLLO_FRITO) jajaja bueno es algo sencillo el codigo aqui se los dejo.


Código: (C) [Seleccionar]
#include <stdio.h>
#include <string.h>
int main()
    {
     int i, N, menu, Set;
    char s1[50000];
    system("cls");
    system("title Mutacion Cifrado Cesar - by Progresive Death");
     printf("[*]---------Mutacion Cifrado v1--------[*]\n");
     printf("             1) Codificar               \n");
     printf("             2) Descodificar            \n\n");
     printf("   Seleccion = ");
     scanf("%i", &menu);
     switch (menu)
         {
         case 1:
             /*-------------Codificacion--------------------*/
             printf("\n[-]String ------> ");
             scanf("%s",&s1);
             printf("[-]N ------> ");
             scanf("%i",&N);
             for (i=0; i<50000; i++)
                 {
                 if (s1[i]>0)
                     {
                     Set=s1[i]+N;
                     if (Set>128)
                         {
                         Set=Set-255;
                         }
                     s1[i]=Set;
                     }
                 else
                    {
                     s1[i]=s1[i];
                     }
                 }
             printf("\n[-]Codificado = %s\n",s1);
             break;
             /*--------------------------------------------*/
         case 2:
             /*-------------Descodificacion----------------*/
             printf("\n[-]String ------> ");
             scanf("%s",&s1);
             printf("[-]N ------> ");
             scanf("%i",&N);
             for (i=0; i<50000; i++)
                 {
                 if (s1[i]>0)
                     {
                     s1[i]=s1[i]-N;
                     if (s1[i]<0)
                         {
                         s1[i]=255-s1[i];
                         }
                     }
                 else
                     {
                     s1[i]=s1[i];
                     }
                 }
             printf("\n[-]Descodificado = %s\n",s1);
             break;
             /*----------------------------------------------*/
 
         default:
             printf("Error------Menu");
             system("pause > null");
             break;
 
         }
     printf("\n\n[*]----------------FIN--------------[*]");
     system("pause > null");
     return 0;
     }

Bueno nos estamos leyendo, un saludo
« Última Modificación: septiembre 27, 2010, 03:25:21 am por Apolo »

[D-m-K]

  • Administrador
  • Mensajes: 229
  • [-.|.-]
    • MSN Messenger - d4rk.m0nk3y@hotmail.com
    • Ver Perfil
    • Red Informatica Colombiana
    • Email
Re: Caesar
« Respuesta #9 : septiembre 28, 2010, 01:42:18 am »
Buenas viejo Apolo, por ah
« Última Modificación: septiembre 28, 2010, 01:43:55 am por [D-m-K] »
:: Todas las grandes cosas que se disfrutan son el producto de las pequeñas cosas que se logran ::

Phicar

  • :P
  • Administrador
  • Mensajes: 283
  • (1+sqrt(5))/2
    • MSN Messenger - diego_villahacker@hotmail.com
    • Ver Perfil
    • Phicar's Blog
    • Email
Re: Caesar
« Respuesta #10 : septiembre 28, 2010, 09:39:45 am »
jjajaja ya te he dicho que tienes la cabeza cuadriculada amigo? :)
:)

my.opera.com/phicar

Apolo

  • Mensajes: 3
    • Ver Perfil
Re: Caesar
« Respuesta #11 : septiembre 28, 2010, 09:54:28 am »
[D-m-K] Gracias viejo, estuve probandolo y ahora quedo al pelo, el problema es que yo no entiendo muy bien la sintaxis que vos manejas pero igual gracias hermano

[D-m-K]

  • Administrador
  • Mensajes: 229
  • [-.|.-]
    • MSN Messenger - d4rk.m0nk3y@hotmail.com
    • Ver Perfil
    • Red Informatica Colombiana
    • Email
Re: Caesar
« Respuesta #12 : septiembre 28, 2010, 11:29:14 am »
jejejeje viejo phi, para ti que es cuadriculado.... xDDD ni porque usara algun tipo de metricas o contara los caracteres por linea, o programara a espacio 1.5 con normas ICONTEQ. xDDD Explicate mejor para ti que es cuadriculado :P.

Bueno viejo Apolo, basicamente maneje la misma logica que implementaste solo que estoy usando instrucciones de C++ y cree un 2 metodos para hacer una programaci
:: Todas las grandes cosas que se disfrutan son el producto de las pequeñas cosas que se logran ::

Phicar

  • :P
  • Administrador
  • Mensajes: 283
  • (1+sqrt(5))/2
    • MSN Messenger - diego_villahacker@hotmail.com
    • Ver Perfil
    • Phicar's Blog
    • Email
Re: Caesar
« Respuesta #13 : septiembre 28, 2010, 11:51:34 am »
Tienes el concepto de funcion muy bien platadito, eres muy organizado viejo :P...estoy terminando un modulo y espero que veas el codigo, parece vomito mental xDDDDDDDDDDDDDDD
« Última Modificación: septiembre 28, 2010, 02:40:13 pm por Str4ng3letS »
:)

my.opera.com/phicar