Underc0de

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
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
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>