Foros del Web » Programando para Internet » Javascript »

Compartiendo script (para mejorarlo)

Estas en el tema de Compartiendo script (para mejorarlo) en el foro de Javascript en Foros del Web. Estaba aburrido y me puse a diseñar un objeto para encriptar texto. El objeto utiliza el sistema de encriptacion de alfabeto circular, creado por Giovanni ...
  #1 (permalink)  
Antiguo 14/04/2002, 13:30
Avatar de Aleph  
Fecha de Ingreso: agosto-2001
Ubicación: Kenolandia
Mensajes: 1.061
Antigüedad: 22 años, 8 meses
Puntos: 3
Compartiendo script (para mejorarlo)

Estaba aburrido y me puse a diseñar un objeto para encriptar texto. El objeto utiliza el sistema de encriptacion de alfabeto circular, creado por Giovanni Battista Belaso de Brescia (de ahi el nombre del objeto).

Como veran, el objeto es muy simple y el metodo de encriptacion es mas que tosco, pero, por estar hecho en JS es bueno para aprender algo mas.
Me gustaria que lo copien y lo prueben, y los que se animan lo mejoren, y los que no sepan que sugieran alguna mejora.

Como muchos otros foreros le dije a Tuk que le enviaria scripts, pero queria que sean mios o por lo menos hechos por nosotros.
Bueno, aqui hay uno. Espero que les resulte interesante.

Saludos.

Script en el siguiente mensaje ->

<div align="right">Guerrillero del ERF</div>
  #2 (permalink)  
Antiguo 14/04/2002, 13:31
Avatar de Aleph  
Fecha de Ingreso: agosto-2001
Ubicación: Kenolandia
Mensajes: 1.061
Antigüedad: 22 años, 8 meses
Puntos: 3
Re: Compartiendo script (para mejorarlo)

Código:
/* Define el metodo encriptar del objeto BBB */
function encriptar(clave,texto)
{
  // inicializa y valida la clave y el texto
  this.clave = clave;
  if (typeof(this.clave) != &quot;string&quot;){ alert (&quot;La clave debe ser una cadena de caracteres&quot;); return; }
  if (this.clave.indexOf(&quot; &quot;) &gt; 0){ alert (&quot;La clave no puede tener espacios en blanco&quot;); return; }
  if (this.clave == null){ alert (&quot;Debe ingresar una clave&quot;); return; }
  this.texto = texto;
  if (typeof(this.texto) != &quot;string&quot;){ alert (&quot;El texto debe ser una cadena de caracteres&quot;); return; }
  if (this.clave.indexOf(&quot; &quot;) &gt; 0){ alert (&quot;La clave no puede tener espacios en blanco&quot;); return; }
  if (this.clave == null){ alert (&quot;Debe ingresar una clave&quot;); return; }

  // convierte a minusculas (limitacion de esta version)
  this.texto = this.texto.toLowerCase();
  this.clave = this.clave.toLowerCase();

  // crea array con cada letra del texto
  var letras = new Array();
  for (x = 0; x &lt; texto.length; x++)
  {
    letras[x] = texto.charAt(x);
  }

  // crea array con cada letra de la clave
  var pass = new Array();
  for (x = 0; x &lt; clave.length; x++)
  {
    pass[x] = clave.charAt(x);
  }

  var z = 0;  // contador para la clave

  this.encript = &quot;&quot;; // quita el texto anterior

  // algoritmo de encriptacion
  for (x = 0; x &lt; letras.length; x++)
  {
    posicion = this.alfabeto.indexOf(letras[x]);
    indice = this.alfabeto.indexOf(pass[z]);
    cript = posicion + indice;
    if (cript &gt; (this.alfabeto.length-1))
    {
      cript = cript - (this.alfabeto.length);  
    }
	this.encript += this.abc[cript];
    if (z &lt; (pass.length-1))
    {
      z += 1;
    }
    else
    {
      z = 0;
    }
  }
  
  return this.encript;
}
<div align="right">Guerrillero del ERF</div>
  #3 (permalink)  
Antiguo 14/04/2002, 13:32
Avatar de Aleph  
Fecha de Ingreso: agosto-2001
Ubicación: Kenolandia
Mensajes: 1.061
Antigüedad: 22 años, 8 meses
Puntos: 3
Re: Compartiendo script (para mejorarlo)

/* Define el metodo desencriptar del objeto BBB */
function desencriptar(clave,texto)
{
// inicializa y valida la clave y el texto
this.clave = clave;
if (typeof(this.clave) != &quot;string&quot;){ alert (&quot;La clave debe ser una cadena de caracteres&quot;); return; }
if (this.clave.indexOf(&quot; &quot;) &gt; 0){ alert (&quot;La clave no puede tener espacios en blanco&quot;); return; }
if (this.clave == null){ alert (&quot;Debe ingresar una clave&quot;); return; }
this.texto = texto;
if (typeof(this.texto) != &quot;string&quot;){ alert (&quot;El texto debe ser una cadena de caracteres&quot;); return; }
if (this.clave.indexOf(&quot; &quot;) &gt; 0){ alert (&quot;La clave no puede tener espacios en blanco&quot;); return; }
if (this.clave == null){ alert (&quot;Debe ingresar una clave&quot;); return; }

// convierte a minusculas (limitacion de esta version)
this.texto = this.texto.toLowerCase();
this.clave = this.clave.toLowerCase();

// crea array con cada letra del texto
var letras = new Array();
for (x = 0; x &lt; texto.length; x++)
{
letras[x] = texto.charAt(x);
}

// crea array con cada letra de la clave
var pass = new Array();
for (x = 0; x &lt; clave.length; x++)
{
pass[x] = clave.charAt(x);
}

var z = 0; // contador para la clave

this.encript = &quot;&quot;; // quita el texto anterior

// algoritmo de encriptacion
for (x = 0; x &lt; letras.length; x++)
{
posicion = this.alfabeto.indexOf(letras[x]);
indice = this.alfabeto.indexOf(pass[z]);
cript = posicion - indice;
if (cript &lt; 0)
{
cript = (this.alfabeto.length) + cript;
}
this.encript += this.abc[cript];
if (z &lt; (pass.length-1))
{
z += 1;
}
else
{
z = 0;
}
}

return this.encript;
}

<div align="right">Guerrillero del ERF</div>
  #4 (permalink)  
Antiguo 14/04/2002, 13:32
Avatar de Aleph  
Fecha de Ingreso: agosto-2001
Ubicación: Kenolandia
Mensajes: 1.061
Antigüedad: 22 años, 8 meses
Puntos: 3
Re: Compartiendo script (para mejorarlo)

/* define objeto BBB */
function BBB(alfabeto)
{
// inicializa y valida la propiedad alfabeto
this.alfabeto = alfabeto;
if (this.alfabeto == null){ this.alfabeto = &quot;abcdefghijklmnñopqrstuvwxyz &quot;; }
if (typeof(this.alfabeto) != &quot;string&quot;){ alert (&quot;El alfabeto debe ser una cadena de caracteres&quot;); return; }

// crea un array con cada caracter del alfabeto
this.abc = new Array();
for (x = 0; x &lt; this.alfabeto.length; x++)
{
this.abc[x] = this.alfabeto.charAt(x);
}

this.encript = new String; // texto encriptado
this.encriptar = encriptar; // metodo encriptar
this.desencriptar = desencriptar; // metodo desencriptar
}

<div align="right">Guerrillero del ERF</div>
  #5 (permalink)  
Antiguo 14/04/2002, 13:36
Avatar de Aleph  
Fecha de Ingreso: agosto-2001
Ubicación: Kenolandia
Mensajes: 1.061
Antigüedad: 22 años, 8 meses
Puntos: 3
Re: Compartiendo script (para mejorarlo)

El script esta completo, pero tuve que separarlo porque no me entraba. Esta separado en cada metodo y en el objeto.
Si quieren hacer una prueba de como funciona, pueden escribir algo asi:

miEncript = new BBB();

document.write(miEncript.encriptar(&quot;clave&quo t;,&quot;Texto a encriptar&quot;));
document.write(&quot;&lt;br&gt;&quot;);
document.write(miEncript.desencriptar(miEncript.cl ave,miEncript.encript));
document.write(&quot;&lt;br&gt;&quot;);
document.write(miEncript.encriptar(miEncript.clave ,miEncript.encript));

Cualquier cosa me avisan.
Saludos y gracias.

<div align="right">Guerrillero del ERF</div>
  #6 (permalink)  
Antiguo 15/04/2002, 01:08
 
Fecha de Ingreso: febrero-2001
Mensajes: 1.374
Antigüedad: 23 años, 2 meses
Puntos: 11
Re: Compartiendo script (para mejorarlo)

Está muy bueno y prolijo el código Aleph ;) Recién lo veo y es muy interesante para entender un poco más las posibilidades que ofrece javascript. Ahora lo copio para probarlo más tarde. Gracias!

Hace mucho descargué un manual de JS de DevGuru, no se si lo tenés? Está buenísimo, creo que sigue estando en Download.com... para que me fijo...

No, pero lo podes bajar del sitio DevGuru.com directamente, fijate en <a href='ir.asp?http://www.devguru.com/Technologies/ecmascript/quickref/javascript_intro.html' target='_blank'>http://www.devguru.com/Technologies/ecma...</a>

Epa.. hice click en 'download' y hay que pagar ahora, si no lo tenes avisame que yo lo descargué cuando era gratis y te lo paso por mail.

Saludos!
tk
  #7 (permalink)  
Antiguo 15/04/2002, 04:31
Avatar de Aleph  
Fecha de Ingreso: agosto-2001
Ubicación: Kenolandia
Mensajes: 1.061
Antigüedad: 22 años, 8 meses
Puntos: 3
Re: Compartiendo script (para mejorarlo)

Gracias por el interes, Tuk. Te estoy debiendo scripts, asi que espero mejorar este .
No, no tengo ese manual, pero me interesaria muchisimo tenerlo, es dificil conseguir un buen manual de referencia (indispensable cuando la memoria empieza a fallar ). Hasta ahora siempre he usado el viejo manual de Netscape. Si me lo podes mandar, joya!

Respecto al script, se habran dado cuenta (como yo) que el alfabeto es muy pobre (segui ese viejo metodo y me olvide de las posibilidades de la informatica ;), entonces, el proximo paso va a ser mejorar esa parte. Ya estoy pensando en la forma, pero si alguien se quiere adelantar, bienvenido .

Saludos.

<div align="right">Guerrillero del ERF</div>
  #8 (permalink)  
Antiguo 15/04/2002, 13:55
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: Compartiendo script (para mejorarlo)

Hola Aleph:
Soy el de la máquina de Turing, sólo he tenido una respuesta tuya, pero creo que estas cosas nos interesan a casi todos los foreros.
Me he bajado el código y lo voy a ver más tarde. Recuerdo haber hecho una rutina de encriptación en pascal; la voy a buscar y cuando la vea, la compararé y si vale la pena te aviso. Recuerdo que era algo muy básico, pero me funcionaba bien...
Saludos
  #9 (permalink)  
Antiguo 15/04/2002, 14:52
Avatar de Aleph  
Fecha de Ingreso: agosto-2001
Ubicación: Kenolandia
Mensajes: 1.061
Antigüedad: 22 años, 8 meses
Puntos: 3
Re: Compartiendo script (para mejorarlo)

Caricatos, gracias por probar el código, decime qué se puede mejorar.
Me encantaría ver esa rutina en Pascal! Todavía tengo instalado el Turbo Pascal 7 (qué tiempos aquellos ).
Gracias por tu interés y espero comentarios.

Saludos.

PD: Tuk! En los mensajes anteriores te iba a felicitar por ScriptMaster y me olvidé, así que lo hago ahora: FELICITACIONES!!


<div align="right">Guerrillero del ERF</div>
  #10 (permalink)  
Antiguo 15/04/2002, 15:52
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: Compartiendo script (para mejorarlo)

Hola Aleph:
La verdad que aún no lo he probado, pero sí lo copie para probarlo más adelante. (Estoy actualizando mi página, y reparto el tiempo como puedo).
Lo que hice es ver mi viejo código y ahí va un copy and paste:

program
encriptar;

const
firma = '(PiS) Pirata Software.';

var
encripte: string;
letra : char;
lugar : byte;

procedure recoge_parametros;
var
i: byte;
begin
lugar := 0;
if paramcount = 0 then
encripte := firma
else
if paramcount = 1 then
encripte := paramstr(1)
else
begin
encripte := paramstr(1);
for i := 2 to paramcount do
encripte := encripte + ' ' + paramstr(i)
end;
end;

function actualizacion_de(caracter: char): char;
var
aux: byte;
begin
if lugar = length(encripte) then
lugar := 1
else
inc(lugar);
aux := ord(caracter) xor ord(encripte[lugar]);
if aux = 26 then
actualizacion_de := caracter
else
actualizacion_de := chr(aux)
end;

begin
recoge_parametros;
while not eof(input) do
begin
read(letra);
write(actualizacion_de(letra))
end
end.

Si lo compilas te diré que se trata de un filtro, o sea que hay que usar &quot;tuberías&quot;, cuando lo usas por primera vez encripta y al usarlo por segunda desencripta.
Ejemplo:
encriptar &lt; fichero.txt &gt; encrip.txt
y para desencriptar:
encriptar &lt; encrip.txt &gt; fichero.txt

Como breve descripción te diré que encripta con la operación xor.

Cuando lea tu código te lo comento:

P.D.: estoy por poner en mi página algunas de las cosas que se vieron en este foro. Si sabes de algo interesante, por favor, cuéntamelo...
  #11 (permalink)  
Antiguo 15/04/2002, 16:29
Avatar de Aleph  
Fecha de Ingreso: agosto-2001
Ubicación: Kenolandia
Mensajes: 1.061
Antigüedad: 22 años, 8 meses
Puntos: 3
Re: Compartiendo script (para mejorarlo)

Gracias por el código! Voy a analizarlo.
Qué bien, vas a recopilar cosas del foro, si recuerdo algo te aviso.

Saludos.

<div align="right">Guerrillero del ERF</div><div align="right" style="font-family:Verdana;font-size:10px">Hay locuras que son poesía, hay locuras de un raro lugar. Hay locuras sin nombre, sin fecha, sin cura, que no vale la pena curar.</div>
  #12 (permalink)  
Antiguo 16/04/2002, 11:47
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: Compartiendo script (para mejorarlo)

Hoal Aleph:
Probé el código y encontre un fallito pequeño:
for (x = 0; x &lt; texto.length; x++)
{
letras[x] = texto.charAt(x);
}

// crea array con cada letra de la clave
var pass = new Array();
for (x = 0; x &lt; clave.length; x++)
{
pass[x] = clave.charAt(x);
}

Te falta el &quot;this.texto.charAt(x)&quot;
y &quot;this.clave.charAt(x)&quot;.

Me extrañó que se comiera las mayúsculas en lugar de convertirla, y es que referenciabas al texto y clave que pasabas como parámatro.

Tal vez sea mejor que no repitas el nombre de las variables ¿?

Otra cosilla, he visto que algunas cosas se repiten en dos de las funciones, supongo que podrías poner una función aparte, por ejemplo:
function chequeo (cadena) {
if (typeof(cadena) != &quot;string&quot;){ alert (&quot;El texto debe ser una cadena de caracteres&quot;); return false;

}

Pero eso no tiene importancia, lo que pasa es que cuando estudié informática, casi todos los profes nos repetían eso de:

Divide y vencerás

Un saludo

  #13 (permalink)  
Antiguo 16/04/2002, 13:14
Avatar de Aleph  
Fecha de Ingreso: agosto-2001
Ubicación: Kenolandia
Mensajes: 1.061
Antigüedad: 22 años, 8 meses
Puntos: 3
Re: Compartiendo script (para mejorarlo)

Hola, Caricatos!
Muchas gracias por probar el código.
Mirá, clave y texto son variables &quot;internas&quot; del objeto, si utilizara this se convertirían en propiedades del objeto, con lo cual se podría acceder a los valores originales de la clave y el texto, de ahi que no las haya declarado como tales.
Lo que decís de las funciones duplicadas es completamente cierto, y es que con el cansancio que tenía esa noche ya no quería cambiar más nada, pero es de las cosas que estoy modificando.
Como comenté antes, también estoy mejorando el alfabeto.
Si se te ocurre algo más, por favor, decimelo.
Muchas gracias por las observaciones, cuando tenga las modificaciones las posteo.

Saludos!

<div align="right">Guerrillero del ERF</div><div align="right" style="font-family:Verdana;font-size:10px">Hay locuras que son poesía, hay locuras de un raro lugar. Hay locuras sin nombre, sin fecha, sin cura, que no vale la pena curar.</div>
  #14 (permalink)  
Antiguo 16/04/2002, 19:41
Avatar de Aleph  
Fecha de Ingreso: agosto-2001
Ubicación: Kenolandia
Mensajes: 1.061
Antigüedad: 22 años, 8 meses
Puntos: 3
Re: Compartiendo script (para mejorarlo)

Caricatos, ya sé a que te referías con this y tenés razón, creo que me enredé un poco con eso.
Estoy viendo mejor el código y hay mucho por optimizar.
Gracias otra vez por la observación.

Saludos.

<div align="right">Guerrillero del ERF</div><div align="right" style="font-family:Verdana;font-size:10px">Hay locuras que son poesía, hay locuras de un raro lugar.<br> Hay locuras sin nombre, sin fecha, sin cura, que no vale la pena curar.</div>
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:46.