Underc0de - La Casa de los Informáticos

Programación Scripting => Python => Mensaje iniciado por: Sanko en Septiembre 06, 2013, 11:26:43 AM

Título: Cifrado Morse
Publicado por: Sanko en Septiembre 06, 2013, 11:26:43 AM
Bueno, este cifrado fue realizado con fin de resolver un reto de programación en UDTOOLS (http://foro.udtools.net/showthread.php?11260-FUNCI%D3N-Morse-Encode-Decode-by-Metal&p=78955&posted=1#post78955).

Código :

Código (python) [Seleccionar]
# Cifrado Morse.py - Sanko
# -*- coding: utf-8 -*-

class cif_morse():

def __init__(self):
self.table = {'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':'--..',
  'Ä':'.-.-', 'Ö':'---.', 'Ü':'..--', '0':'-----',
  '1':'.----', '2':'..---', '3':'...--', '4':'....-',
  '5':'.....', '6':'-....', '7':'--...', '8':'---..',
  '9':'----.', '.':'.-.-.-', ',':'--..--', '?':'..--..',
  '!':'..--.', ':':'---...', '"':'.-..-.', "'":".----.",
  '=':'-...-', ' ':' '}

self.table2 = {}

# Inicializar desde aqui
self.__encode('Sanko os saluda')
self.__decode('... .- -. -.- ---   --- ...   ... .- .-.. ..- -.. .-')



def __encode(self, text):
self.text = text
self.encoded = ''

if self.text != '':
self.text = self.text.upper()

for i in self.text:
self.encoded += self.table[i] + ' '

print "Encoded: %s"% self.encoded



def __decode(self, en_text):
self.en_text = en_text
self.decoded = ''

for i in self.table:
self.table2[self.table[i]] = i

self.en_text = self.en_text.split(' ')

for x in self.en_text:
try:
self.en_text.remove('')
except:
pass
self.decoded += self.table2[x]

print "Decoded: %s"% self.decoded

cif_morse()

      
Imágen :
(http://i.imgur.com/yiIz1Ae.png)
Título: Re:Cifrado Morse
Publicado por: Jimeno en Septiembre 06, 2013, 11:46:26 AM
Un cifrado más, buena esa, Sanko.
Pero ya tenías que aburrirte para haber programado esto... Lo mejor de todo los ejemplos, jajajajaja.
PD: me gusta lo limpio que te quedó el código :P
Título: Re:Cifrado Morse
Publicado por: Sanko en Septiembre 06, 2013, 12:07:16 PM
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Un cifrado más, buena esa, Sanko.
Pero ya tenías que aburrirte para haber programado esto... Lo mejor de todo los ejemplos, jajajajaja.
PD: me gusta lo limpio que te quedó el código :P

Jajaja suelo despertarme y pasarme por udtools a ver si han subido algún reto de programación xD, programar antes de salir de casa relaja a uno.
Saludos gayer.
Título: Re:Cifrado Morse
Publicado por: arthusu en Septiembre 07, 2013, 04:25:34 AM
Bueno Sanko tambien lo intente hacer en PHP, solo que al decodificar no se como darle los espacios y otra cosa queria usar en la expresion regular \b$acamivariable\b en el decodificado pero no daba el resultado deseado por eso use ^preg_quote($acamivariable)$, puede contener muchos errores por lo que si hay alguna forma mejor o algo que se pueda mejorar y sepan como hacerlo son libres de editarlo o comentarme como hacerlo, gracias Sanko  me diverti un rato salu2 bro

Código (php) [Seleccionar]
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8">
<title>Cifrado morse</title>
</head>
<body>
<?php
$abc=array('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'=>'--..',0=>'-----',1=>'.----',2=>'..---',3=>'...--',4=>'...-',5=>'.....',6=>'-....',7=>'--...',8=>'---..',9=>'----.','.'=>'.-.-.-',','=>'--..--','?'=>'..--..','!'=>'..--.',':'=>'---...','"'=>'.-..-.',"'"=>'.----.','='=>'-...-'," "=>" ");

if(isset($_POST['enviar'])){
if(!empty($_POST['morse'])){
switch ($_POST['morse2']) {
case 'Encode':
$post=$_POST['morse'];
for($i=0;$i<=strlen($post);$i++){
$letra=substr($post$i,1);
foreach($abc as $key=>$value){
if(preg_match("/^".preg_quote($letra)."$/i"$key)){
echo htmlentities($value)." ";
}
}
}
break;
case 'Decode':
$post=$_POST['morse'];
$morse_pal=explode(" ",$post);
foreach($morse_pal as $letra){

foreach($abc as $key=>$value){
if(preg_match("/^".preg_quote($letra)."$/i"$value)){
echo htmlentities(strtoupper($key));
}
}
}
break;
default:
echo "Ocurrio un error";
break;
}
}else{
echo "Rellene el campo";
}
}

?>

<form action="" method="post">
<p><b>Ingrese el texto:</b></p>
<input name="morse" type="text" /><br />
<input type="radio" name="morse2" value="Encode">Codificar<br>
<input type="radio" name="morse2" value="Decode" checked="checked">Decodificar<br>
<input type="submit" name="enviar" />
</form>
</body>
</html>


Resultado:

(http://i.imgur.com/TaRvuMr.png)
(http://i.imgur.com/J9NPm5G.png)
Título: Re:Cifrado Morse
Publicado por: Danyfirex en Septiembre 07, 2013, 10:04:54 AM
Debes colocar espacios ejemplo después de .-[aquí va un espacio]---[aquí otro]---   así sucesivamente.  obviamente si tienes un espacio ahí se colocaran 2. o simplemente agregas algún carácter que te ayude a delimitar para el decodificado.

ejemplo así:

Código (php) [Seleccionar]
<?php
$abc
=array('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'=>'--..',0=>'-----',1=>'.----',2=>'..---',3=>'...--',4=>'...-',5=>'.....',6=>'-....',7=>'--...',8=>'---..',9=>'----.','.'=>'.-.-.-',','=>'--..--','?'=>'..--..','!'=>'..--.',':'=>'---...','"'=>'.-..-.',"'"=>'.----.','='=>'-...-'," "=>" ");
 
//echo $abc['A'];
 
$final="";
 
 
$cadena="HOLA HOLA";
  for(
$i=0;$i<=strlen($cadena);$i++){
  
$letra=substr($cadena$i,1);
     
  if ($letra==" ") {
       
$final.=$abc[$letra];
   }else{
    $final.=$abc[$letra] . "&nbsp;";
        }
 
  }
  echo 
$final;
?>




así en el descifrado te queda solo hacer split con un espacio.


saludos


Título: Re:Cifrado Morse
Publicado por: binary_death en Septiembre 07, 2013, 01:13:41 PM
Hombre sí... pero el morse no es un cifrado, todo lo contrario.
Hace un tiempo yo estaba muy aficionado a eso del morse  :P Vale la pena conocerlo, nunca sabes para lo que te servirá.
Título: Re:Cifrado Morse
Publicado por: arthusu en Septiembre 08, 2013, 12:55:17 AM
Ya arregle lo de los espacios gracias a Danyfirex aca dejo el codigo:

Código (php) [Seleccionar]
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8">
<title>Cifrado morse</title>
</head>
<body>
<?php
$abc=array('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'=>'--..',0=>'-----',1=>'.----',2=>'..---',3=>'...--',4=>'...-',5=>'.....',6=>'-....',7=>'--...',8=>'---..',9=>'----.','.'=>'.-.-.-',','=>'--..--','?'=>'..--..','!'=>'..--.',':'=>'---...','"'=>'.-..-.',"'"=>'.----.','='=>'-...-',' '=>' ');

if(isset($_POST['enviar'])){
if(!empty($_POST['morse'])){
switch ($_POST['morse2']) {
case 'Encode':
$post=$_POST['morse'];
for($i=0;$i<=strlen($post);$i++){
$letra=substr($post$i,1);
foreach($abc as $key=>$value){
if(preg_match("/^".preg_quote($letra)."$/i"$key)){
echo htmlentities($value)."&nbsp;";
}
}
}
break;
case 'Decode':
$post=$_POST['morse'];
$morse_pal=explode(" ",$post);
foreach($morse_pal as $indice=>$letra){
foreach($abc as $key=>$value){
if(empty($letra)){$letra=' ';}
if(preg_match("/^".preg_quote($letra)."$/i"$value)){
echo htmlentities(strtoupper($key));
}
}
}

break;
default:
echo "Ocurrio un error";
break;
}
}else{
echo "Rellene el campo";
}
}

?>

<form action="" method="post">
<p><b>Ingrese el texto:</b></p>
<input name="morse" type="text" /><br />
<input type="radio" name="morse2" value="Encode">Codificar<br>
<input type="radio" name="morse2" value="Decode" checked="checked">Decodificar<br>
<input type="submit" name="enviar" />
</form>
</body>
</html>