Comunidad de diseño web y desarrollo en internet online

Encriptacion y Desencriptacion MD5 en AS3

Citar            
MensajeEscrito el 26 May 2009 11:51 am
Ufff... son ganas de rizar el rizo la verdad :S

Bueno os lo explico:

En esta ocacion me enfrento a lo mas complicado de todo este proyecto. La encriptacion y desencriptacion en MD5.

Tengo 3 variables:

varMosca = Mi logotipo
varVideoC = Video cornitinilla o de intro.
varVideo = el video que quiero reproducir.

Lo que tengo que hacer es lo siguiente:

- Definir una sola variables desde el HTML:

Código :

AC_FL_RunContent(
...
      'FlashVars', 'varCod = ***************************************************'
...   
   ); //end AC code


Pensando que los asteriscos son las tres variables encriptadas con MD5. Desencriptada debequedar algo asi:

" varVideo="Nombre del Video",varVideoC="Nombre de cortinilla",varMosca="Nombre de la mosca/logo" "

Asta aqui creo que todo claro no?

Ahora tendria que pasar esa variable "varCod" al reproductor y una vez dentro que lo desencripte y que coja el nombre de las variables y los valores que iran entre comillas (Por eso las he puesto en negrita).

Es bastante complicado por no decir que supera enormemente mis conocimientos (Que ya sabeis cuales son dado el alto numero de post xD)

Espero que me podais ayudar.

Andres.

PD: Espero haberme haberme explicado bien.

Por NiGGa

35 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 May 2009 12:03 pm
Me acabo de dar cuenta que esto es un re-post de otro post mio ... supongo que infringe las normas del foro asique disculpad.

A lo que iba...

Mirando en internet me volvi a chocar con esto :

http://labs.boulevart.be/index.php/2007/05/23/encryption-in-as2-and-as3/

Tube problemas para implemetarlo y ahora no es diferente... si alguien pudiera explicarme por encima el funcionamiento de esto seria de bastante ayuda.

Andrés.

PD: Este post esta bastante mejor explicado a lo que tengo que hacer... asique si lo eliminais casi prefiero que borreis el otro... Pidiendo disculpas a Eliseo2 que se tomo la molestia de guiarme antes.

Por NiGGa

35 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 May 2009 01:47 pm
MD5 es un hash "one way", es decir encriptas pero no puedes desencriptar. Usualmente lo que se hace es guardar el hash, y luego convertir el input del usuario con el algoritmo y comparar el resultante con lo que tienes guardado.
La biblioteca as3corelib tiene entre muchas otras cosas, un algoritmo para generar el hash MD5 (además SHA1) http://code.google.com/p/as3corelib/

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 26 May 2009 01:55 pm
Gracias Jorge !! te estas ganando el cielo por aguantarme compadre xD

Ahora la cosa es... como lo implemento ?? Mis conocimientos no lleguan a tanto :(

Si pudieras hacer un pequeño ejemplo por el que poder guiarme seria de gran ayuda.

Gracias. Andrés

Por NiGGa

35 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 May 2009 02:17 pm
Bueno, hay que tener conocimiento base para ciertas tareas. Anyway, seguro que el amigo Eliseo te escribe un mini-tutorial

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 26 May 2009 02:21 pm
Pues tendre que contactar con Eliseo... jeje

Gracias Jorge !

PD: Cuando termine esto hare un toturial sobre com ize mi maravilloso reproductor... por lo menos asi contribuyo y ayudo a los que como yo se inician en esto sin saber nada de AS3.

Por NiGGa

35 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 May 2009 04:50 pm
Nigga creo que con MD5 no podras lograr la funcionalidad que deseas. como dise solisarg, MD5 es de solo "ida", de ninguna manera podras recuperar lo que encryptaste, la encryptacion en MD5 se usa sobre todo para aser comparaciones con datos ya encryptados, y para recuperar datos de un FlashVar no es posible, ya que necesiarias algo como un campo "imputText" donde introducirias los datos sin encryptar y luego compararlos con los encryptados y si son iguales ntonces recien podras reproducir tu video, lo cual imagino no es lo que quieres. Tienes que usar un una encryptacion de tipo "ida y vuelta". me dejo entender?.

Por marrkitos

51 de clabLevel



 

Arequipa - Peru

firefox
Citar            
MensajeEscrito el 26 May 2009 05:50 pm
De modo "step by step"
Vete a la página de RiaForge y descargaté la librería As3Crypto
Descomprímela en un directorio cualquiera. Tienes dos directorios bin y com.
Copiaté el directorio com a una carpeta -con todos sus subdirectorios- Yo por ejemplo la he dejado en
c:/Mis Documentos/ASCrip32, pero la puedes dejar donde quieras
Tengo pues
c:/Mis Documentos/ASCrip32
c:/Mis Documentos/ASCrip32/com
c:/Mis Documentos/ASCrip32/com/.svn
c:/Mis Documentos/ASCrip32/com/meychi
c:/Mis Documentos/ASCrip32/com/meychi/ascrypt3
.....

Abres un nuevo proyecto de Flash y le añades como ClassPath el directorio donde la has dejado ("c:/MisDocumentos/ASCrip32").
Yo es que ahora mismo tengo el FlashDeveloper, así que le he selecionado le he dado a proyecto con el botón derecho del ratón y lo he añadido (ahora mismo no recuerdo muy bien cómo se hacía en en IDE de Flash)
Ya casi lo tenemos.

Si tienes Flash basta con que escribamos

Código ActionScript :

import com.meychi.ascrypt3.TEA;
var tea:TEA = new TEA();
var palabra_encriptada:String=tea.encrypt("Hola Mundo","qazwsxedc");
trace(palabra_encriptada);

Observa que el "método" encrypt de "tea" tiene dos argumentos, lo que quieres encriptar -en mi ejemplo "Hola Mundo"- y un string que se usa como "key", en mi ejemplo "qazwsxedc".

Si quisiéramos desencriptar deberíamos escribir

Código ActionScript :

import com.meychi.ascrypt3.TEA;
var tea:TEA = new TEA();
var palabra_desencriptada:String=tea.encrypt("7228c2659a59c9a873f190e9","qazwsxedc");
trace(palabra_desencriptada);

Vale, tú realmente no quieres encriptar y desencriptar "Hola Mundo", sino que quieres encriptar una línea como
"Nombre del Video|Nombre de cortinilla|Nombre de la mosca/logo"
Observa que he puesto una única variable separada por "|"
Así que te haces un pequeño .fla que te devuelva la palabra encriptada de cada item que quieras.
Luego sólo hace falta que recojas el valor de esa variable, la desencriptes y hagas un split

Código ActionScript :

import com.meychi.ascrypt3.TEA;
var tea:TEA = new TEA();
var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters;
var valueStr:String = String(paramObj["key"]); //<--si la has llamado "key"

var key_desencriptada:String=tea.encrypt(valueStr,"qazwsxedc");
var datos:Array=key_desencriptada.split("|");
//en datos[0] tienes el nombre del video
//en datos[1] tienes el nombre de la cortinilla
//en datos[2] tienes el nombre de la mosca o el logo


Vale, ves que, si descompilan el .swf, tiene la "key" (ese "qazwsxedc") y, por tanto cualquiera podría conocer esos datos. Es el problema de los algoritmos de encriptación reversibles. Se le puede dar una "vuelta" tal y como hacía Sidedev tenía una clave codificada de modo no reversible, que obligaba al usuario a meter, comprobaba que esa clave era la correcta y se descriptaba con esa clave que había metido el usuario
1.-Se pregunta al usuario una password (por ejemplo "qazwsxedc") y guardamos su valor en una variable
2.-Se comprueba que esa password encriptada vale, p.e.""7e4231b4e1b8534ea5106bf821f0bb324987c567"
3.-Desencriptamos el valor del FlashVars con el valor de esa variable

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 May 2009 06:05 pm
Vale, realmente, si no quieres hacer todo eso de la librería, puedes copiarte SOLO el fichero TEA.as a tu directorio de trabajo y modificarlo.
Donde pone

Código ActionScript :

package com.meychi.ascrypt3{
   ....resto de código....
}

lo cambias por un

Código ActionScript :

package {
   ....resto de código....
}

Claro que el "import" quedaría simplemente

Código ActionScript :

import TEA;

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 May 2009 07:16 pm
Eliseo, perdona pero el link de la libreria no se si esta mal o es de otra version pero no corresponden con las rutas de tus carpetas por ningun lado... Un screenshot.


En todo caso busque la misma libreria con referencia meychi y solo me salia referente a AS2

No se donde encontrar la misma libreria para AS3 :S

Andrés.

Por NiGGa

35 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 May 2009 08:48 pm
Pues si. Tienes razon me descargue esa libreria y no tiene las carpetas que dice eliseo, seguro cambiaron la estructura porque los de RIAforge al parecer paran actualizando seguido su codigo.

Si gustas podria darte una solucion alternativa, que incluso se muestra en uno de los archivos de documentacion de AIR, el ejemplo muestra como encryptar contraseñas para bases de datos, pero es funcional para cualkier aplicacion.
Solo avisame si te interesa.

Por marrkitos

51 de clabLevel



 

Arequipa - Peru

chrome
Citar            
MensajeEscrito el 26 May 2009 08:57 pm
Gracias por tu atencion marrkitos. Este mini-tuto de Eliseo es lo que buscaba, aunque ya me habia imaginado que quedaria esa vulnerabilidad... con tu metodo seguiria existiendo ??

Aun en caso de existir no estaria mal que me documentaras... por si a caso no puedo dar con la libreria que usa Eliseo.

Andrés.

Por NiGGa

35 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 May 2009 09:11 pm
cuando dices "vulnerabilidad" te refieres a decompilar el .swf? si te refieres a eso pues esa vulnerabilidad es inevitable ya que como la misma gente de adobe dice cualkier archivo de flash es facilmente decompilable. Por eso la solucion se situa es crear una aplicacion donde el usuario ingrese una contraseña y a partir de ella desencryptar lo que desees.

Por cierto la solucion a la que me refiero usa as3corelib que es del mismo proyecto de RIAforge que segun entiendo ese sitio es soportado por adobe (algo asi lei por ai), asi que no te agas problemas de que si es confiable o no, ya que usa maxima seguridad (eso dice en la codumentacion). Todo esta ai en la documentacion, te explican todo paso a paso.

Si te decides me avisas y yo te paso el pdf y las librerias mas si esque no las tienes.

Saludos.

Por marrkitos

51 de clabLevel



 

Arequipa - Peru

chrome
Citar            
MensajeEscrito el 26 May 2009 09:20 pm
Entiendo... entonces no voy ha hacerte prder el tiempo. Hare la solucion de Eliseo... esperando que si puede me envie las librerias que el uso... o si tu tienes las mismas te agradeceria que me las enviaras.

Andrés.

Por NiGGa

35 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 May 2009 09:35 pm
Exactamente el que pides no lo tengo.

Bueno te dejo y suerte.

Por marrkitos

51 de clabLevel



 

Arequipa - Peru

chrome
Citar            
MensajeEscrito el 27 May 2009 06:39 am
¡¡MIERDA!! me equivoqué de librería Es ésta (Ya les vale a los de riaforge :) )

Por cierto, para importar en el IDE de Flash es como dice la página de Adobe:
Edición > Preferencias (Windows) o Flash > Preferencias (Macintosh), seleccionamos ActionScript de la lista Categoría y hacemos clic en Configuración de ActionScript 2.0).

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 May 2009 12:22 pm
Gracias Eliseo !!

Esta tarde lo probare cuando valla a la empresa jejeje

Por cierto, me he fijado, tu usas la clase "TEA"... la implementacion con "MD5" seria igual no ??

Andrés.

Por NiGGa

35 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 May 2009 02:25 pm
Es que el algoritmo MD5 es NO reversible. ¿Qué quiere decir eso? que sólo sirve para comprobar si una password está bien introducida o no.
Vamos, tenemos por ejemplo

Código ActionScript :

import com.meychi.ascrypt3.MD5; 
var md5:MD5 = new MD5(); 
var palabra_encriptada:String=md5.calculate("Hola Mundo") //<--el método es calculate
trace(palabra_encriptada);

Ahora hacemos otro Flash en el que tenemos una caja de texto y un botón

Código ActionScript :

import com.meychi.ascrypt3.MD5; 
boton.addEventListener(MouseEvent.MOUSE_DOWN,comprobar)
function comprobar(e:MouseEvent){
   var md5:MD5 = new MD5(); 
   var palabra_encriptada:String=md5.calculate(caja_de_texto.text) //<--lo que ponga en la caja de texto
   if (palabra_encriptada=="d501194c987486789bb01b50dc1a0adb"){ //<--lo que nos dió el trace del código anterior
          trace("Has dado con la clave")
   }else{
          trace("no tienes acceso")
  }
}

Pero NO sirve para dada una palabra encriptada, desencriptarla.

De la librería te sirven las Clases TEA y RC4 (también la Base64 -esta última no tiene palabra clave-), pero no te sirve la MD5 ni la SHA1 porque NO son reversibles.

Vale, el ejemplo completo con una caja de texto de entrada puede ser

Código ActionScript :

import com.meychi.ascrypt3.MD5;
import com.meychiascrypt3.TEA; 

var key:String; //<--definimos aquí una variable

boton.addEventListener(MouseEvent.MOUSE_DOWN,comprobar)
function comprobar(e:MouseEvent){
   var md5:MD5 = new MD5(); 
   var palabra_encriptada:String=md5.calculate(caja_de_texto.text) //<--lo que ponga en la caja de texto
   if (palabra_encriptada=="d501194c987486789bb01b50dc1a0adb"){ //<--lo que nos dió el trace del código anterior
          key=caja_de_texto.text //<--igualamos la variable "key" a lo introducido 
          getDatos();
   }else{
          trace("no tienes acceso")
  }
}
function getDatos(){
   var tea:TEA = new TEA(); 
   var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters; 
   var valueStr:String = String(paramObj["key"]); //<--si la has llamado "key" 
 
   var key_desencriptada:String=tea.encrypt(valueStr,key); //<--aquí usamos el "key"
   var datos:Array=key_desencriptada.split("|"); 
   //en datos[0] tienes el nombre del video 
   //en datos[1] tienes el nombre de la cortinilla 
   //en datos[2] tienes el nombre de la mosca o el logo 
  }
}

Así, todo el que sepa la clave "Hola Mundo" podrá escuchar la música, si no, no lo podrá hacer

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 May 2009 02:39 pm
Muchas gracias Eliseo.

Ya me di cuenta de no lo podia usar con MD5 xD

He usado TEA que es el ejemplo que has dado... y na lo que tu decias que la key se podia ver descopilando... yo no puedo hacer nada con eso... asique... jejeje

Muchas gracias de verdad !!

Por NiGGa

35 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 May 2009 03:59 pm
La "key" la podrías guardar en un fichero y leer el fichero (aunque siempre está el peligro de que te lean el fichero),
o puedes tener tener un php con la key codificada mediante un algoritmo reversible, de modo que la palabra clave sea la dirección desde donde se llama al php, para que sólo desde tu página (o desde tu IP) se pueda adquirir esa clave -supongo que alguien podría simular tu IP, pero ya estamos hablando de no simples mortales)

No se me ocurre mucho más de lo dicho sobre encriptación y desencriptación :(

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 May 2009 04:02 pm
Apunto todo eso... aunque... ejem...

Ahora resulta que quieren hacer que los hash se lancen desde un asp... en ese caso ya no me meto xq no me encargo de VB... aunque luego habra que implementarlo... en fin... ya veremos como va xD

En todo caso te estare eternamente agradecido... he aprendido AS3 en 2 meses con tutoriales y estas ultimas semanas con vosotros... asique gracias !!

Por NiGGa

35 de clabLevel



 

firefox
Citar            
MensajeEscrito el 29 May 2009 03:30 pm
:) hola intersante el tema yo busco algo similar baje para flex en este path http://crypto.hurlant.com/demo/srcview/
y no vale o no entiendo :| la encriptacion y desencriptacion para 3des o conocido tambien como Triple Des.

agradesco cualquier ayuda. busco para flex o flash. :wink:

Por riback

49 de clabLevel



 

Quito - Ecuador

msie7

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.