Entradas etiquetadas con cesar
¿Qué es el Cifrado César?
29 may
El cifrado César, también conocido como cifrado por desplazamiento, código de César o desplazamiento de César, es una de las técnicas decodificación más simples y más usadas. Es un tipo de cifrado por sustitución en el que una letra en el texto original es reemplazada por otra letra que se encuentra un número fijo de posiciones más adelante en el alfabeto. Por ejemplo, con un desplazamiento de 3, la A sería sustituida por la D (situada 3 lugares a la derecha de la A ), la B sería reemplazada por la E, etc. Este método debe su nombre a Julio César, que lo usaba para comunicarse con sus generales.
En síntesis, el cifrado César es una técnica de codificación que consiste en mover los caracteres de una palabra de acuerdo a la posición dada en la clave, por ejemplo:
Palabra Original: Hola
Clave de cifrado: 3
Palabra cifrada: Krod
Siendo así:
El descifrado es igual de sencillo, pero haciendo el proceso contrario, si en el cifrado sumamos la clave a la palabra, logrando así un movimiento, en el descifrado simplemente restamos.
Enfocándonos un poco en la implementación de este cifrado en la programación, se han realizado varias versiones de acuerdo a cada lenguaje.
Versiones disponibles ( Java por [p3ll3] ) ( C++ por .:WindHack:. ) ( Pascal por .:WindHack:.) ( Batch por Bolivianito ) ( Python Más >
Cifrado César en ASM
29 may
Versión en ASM del algoritmo de cifrado César, programada por CronuX.
Cesar.inc:
.data Cifrado db 128 Dup(?) msgerror db "Ingresado Caracteres Invalidos",0 msgerrorclave db "Clave Ingresada Invalida",0 .data? Nombre db 256 Dup(?) clave db 256 dup(?)
Cesar.asm:
;**************************************** ; @---------------------------------- ; @ Autor original: [p3ll3] ; @ Version original: Java ; @ Autor modificacion: CronuX ; @ Version modificacion: ASM (Masm32) ; @ Sitio web: ; - http://foro.code-makers.net ; @---------------------------------- ;***************************************** invoke GetDlgItemText,hWin,EditNombre,addr Nombre,128 xor eax,eax invoke GetDlgItemText,hWin,Editclave,addr clave,18 invoke atodw,addr clave cmp eax, 19h jnl errorclave xor ecx,ecx mov ecx,eax xor ebx,ebx xor eax,eax bucle: mov al,byte ptr [ebx+Nombre] cmp al, 41h jl error cmp al, 5bh jl suma jmp sigue suma: add al,32 sigue: cmp al,61h jl error cmp al, 7bh jnl error add al,cl cmp al,7ah jbe sigue2 sub al,7ah add al,60h jmp sigue2 sigue2: mov byte ptr [Cifrado+ebx],al inc ebx cmp byte ptr [Nombre+ebx],0 je sale jmp bucle sale: mov byte ptr[Cifrado+EBX],0 Invoke SetDlgItemText,hWin,EditCifrado,addr Cifrado jmp salida error: invoke SetDlgItemText,hWin,EditCifrado,addr msgerror jmp salida errorclave: invoke SetDlgItemText,hWin,EditCifrado,addr msgerrorclave salida: fin
Cifrado César en Batch
29 may
Versión en Batch del algoritmo de cifrado César, programada por Bolivianito.
@echo off setlocal enabledelayedexpansion set c=0 for %%a in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do ( set "!C!=%%a"&set "%%a=!c!" call:sum ) set /p "texto=Ingrese un texto : " set /p "desp=Ingrese un numero de desplazamiento : " Set /p "=%texto%"text&call:cc text for /l %%a in (0,1,%leght%) do ( call:procesa !texto:~%%a,1! ) echo %resultado% pause>nul exit :procesa set /a j=!%1!+%desp% if %j% GEQ 26 (set /a “j-=26″) set resultado=%resultado%!%j%! exit/b :sum set /a c+=1 exit/b :cc set /a "leght=%~z1-1" exit/b
Cifrado César en Python
29 may
Versión en Python del algoritmo de cifrado César, programada por Sifaw.
#**************************************** # ---------------------------------- # Autor original: [p3ll3] # Version original: Java # Autor modificacion: Sifaw # Version modificacion: Python 2.5.4 # Sitio web: # - http://foro.code-makers.net # ---------------------------------- #***************************************** #Abecedario usado para el cifrado Abecedario = ['a','b','c','d','e','f','g','h','i','j','k', 'l','m','n','o','p','q','r','s','t','u','v', 'w','x','y','z'] NuevaPalabra = '' #Pedimos la palabra Palabra = raw_input('Escibra la palabra que desea cifrar: ') Palabra = Palabra.lower() #pasamos a minuscula ALength = len(Abecedario) #Obtenemos la longitud del abecedario #Pedimos la clave Clave = input('Elija la palabra con la que cifrar (de 1 a 24): ') if (Clave >= 1) and (Clave <= 26): #Verificamos que sea incorrecta i = 0 while i < len(Palabra): #Recorremos la palabra x = 0 while x < ALength: #Recorremos el abecedario if (Palabra[i] == Abecedario[x]): #Buscamos caracteres que esten en ambos if (x+Clave <= 26): Temp = x+Clave Tmp = Temp-26 NuevaPalabra += Abecedario[Tmp] #Creamos la palabra else: NuevaPalabra += Abecedario[x+Clave] #Creamos la palabra x += 1 i += 1 else: print 'Clave incorrecta' print 'La palabra cifrada es %s' % NuevaPalabra raw_input()
Alternativa a este cifrado, programada por mí.
################################### # Autor: .:WindHack:. # # Sitio web: http://daw-labs.com # # Agradecimientos: Sifaw # ################################### def Cifrar_Cesar(String,Key): tmp = '' for i in String: tmp += chr(ord(i)+Key) return tmp def Descifrar_Cesar(String,Key): return Cifrar_Cesar(String,-Key) print " ================================= " print "| Des/Cifrar Cesar |" print "| .:WindHack:. |" print "| http://daw-labs.com |" print " ================================= " Palabra = raw_input("Introduce la frase: ") Clave = input("Introduce la clave: ") print "Palabra cifrada: " + Cifrar_Cesar(Palabra,Clave) print "Palabra descifrada: " + Descifrar_Cesar(Palabra,Clave)Más >
Cifrado César en Pascal
29 may
Versión en Pascal del algoritmo de cifrado César, programada por mí.
program CesarCifrado; {$APPTYPE CONSOLE} uses SysUtils; var Alphabet: Array [0..25] of Char=('a','b','c','d','e','f','g','h','i','j','k', 'l','m','n','o','p','q','r','s','t','u','v', 'w','x','y','z'); NWord:String = ''; Palabra: String; Clave:Integer; function CifrarCesar(AString:String;AKey:Integer):String; var I,J,ALength,Temp,Tmp:Integer; begin Result := ''; AString := LowerCase(AString); ALength := Length(Alphabet); if (AKey >= 1) and (AKey <= 26) then begin for I := 0 to Length(AString) do for J := 0 to ALength -1 do if (AString[I] = Alphabet[J]) then if J+AKey <= 26 then begin Temp := J+AKey; Tmp := Temp-26; NWord := NWord + Alphabet[Tmp] end else NWord := NWord + Alphabet[J+AKey]; end; Result := NWord; end; begin try WriteLn('Escriba la palabra que desea cifrar > '); ReadLn(Palabra); WriteLn('Escriba la clave para codificar (entre 1 y 24) > '); ReadLn(Clave); Write('La palabra cifrada es: ',CifrarCesar(Palabra,Clave)); ReadLn; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end.
Cifrado César en C++
24 may
Versión en C++ del algoritmo de cifrado César, programada por mí.
/**************************************** @---------------------------------- @ Autor original: [p3ll3] @ Version original: Java @ Autor modificacion: .:WindHack:. @ Version modificacion: C++ @ Sitio web: - http://daw-labs.com - http://foro.code-makers.net @---------------------------------- *****************************************/ #include <iostream> #include <string> using namespace std; /* Declaracion de variables.. El abecedario que usaremos para el cifrado. */ char Abecedario[]={'a','b','c','d','e','f','g','h','i','j','k', 'l','m','n','o','p','q','r','s','t','u','v', 'w','x','y','z'}; string Palabra,NuevaPalabra = ""; unsigned int i,x,ALength,Temp,Tmp,Clave = 0; /* Funcion para convertir una cadena de texto a minusculas. */ string StringToLower(string strToConvert) { for(unsigned int i=0;i < strToConvert.length();i++) { strToConvert[i] = tolower(strToConvert[i]); } return strToConvert; } /* Instancia principal de la aplicacion. */ int main() { cout << "Escriba la palabra que desea cifrar > "; /* Pedimos la palabra */ cin >> Palabra; /* La recibimos y guardamos en la variable "Palabra". */ Palabra = StringToLower(Palabra); /* La convertimos a minusculas. */ ALength = strlen(Abecedario); /* Obtenemos la longitud del abecedario */ cout << "Escriba la clave para codificar (entre 1 y 24) > ";/* Pedimos la clave de cifrado. */ cin >> Clave; /* La recibimos y guardamos en la varible "Clave". */ if ((Clave >= 1) & (Clave <= 26)){ /* Confirmamos si es correcta...*/ for (i = 0; i < Palabra.length(); i++){ /* Recorremos la palabra hasta el final. */ for (x = 0; x < ALength - 1; x++){ /* Recorremos el abecedarios. */ if (Palabra[i] == Abecedario[x]){ /* Buscamos caracteres que estén en ambos. */ if (x+Clave >= 26){ Temp = x+Clave; Tmp = Temp-26; NuevaPalabra = NuevaPalabra + Abecedario[Tmp]; /* Creando la palabra. */ }else NuevaPalabra = NuevaPalabra + Abecedario[x+Clave]; /* Creando la palabra. */ } } } }else cout << "Clave errónea"; cout << "La palabra cifrada es " << NuevaPalabra; /* Muestro la palabra cifrada. */ getchar(); return 0; }
Una alternativa un poco más cómoda:
/*
===================================
@Autor: Más > 
