Sim tanto que fiz um post http://blog.mxml.com.br/ambiente-restrito-no-flex-usando-seguranca-na-senha
2009/3/3 Lucas Araujo <[email protected]> > > Alguém aqui já conseguiu criptografar alguma String com a bilioteca > as3crypto, passar para o PHP, e depois descriptografar? > > Tentei isso à algum tempo atrás e não consegui, pesquisei no google, > mas também não deu certo... Sempre a string criptofgrafada que eu > recebia no PHP não era transformada corretamente para a original > > Obrigado, > Lucas Araujo, > http://twitter.com/LucasAraujo > > > > On Tue, Mar 3, 2009 at 12:14, Julio Carneiro <[email protected]> wrote: > > > > Eu tb uso esta classe, que pode ser encontrada aqui: > > http://gsolofp.blogspot.com/2006/01/actionscript-3-md5-and-sha1.html > > > > Uso sem problemas, depois de uns pequenos ajustes para eliminar > > warnings. > > > > Lá tem tb uma classe pra SHA1, se alguém precisar. > > > > julio > > > > > > On Mar 3, 11:44 am, Ricardo Ramires <[email protected]> wrote: > >> Estou usando essa que alguém(não lembro de onde peguei) converteu do > >> javascript para as3, lembro que tinha uns warnings, pq quem tinha > >> feito não tava usando o modo estrito, mas agora ta certinha: > >> > >> Usa chamando o metodo estático MD5.encrypt("suastring"); > >> > >> package helpers { > >> public class MD5 { > >> > >> /* > >> * Configurable variables. You may need to tweak these > to be > >> compatible with > >> * the server-side, but the defaults work in most cases. > >> */ > >> > >> public static const HEX_FORMAT_LOWERCASE:uint = 0; > >> public static const HEX_FORMAT_UPPERCASE:uint = 1; > >> > >> public static const > BASE64_PAD_CHARACTER_DEFAULT_COMPLIANCE:String = > >> ""; > >> public static const > BASE64_PAD_CHARACTER_RFC_COMPLIANCE:String = > >> "="; > >> > >> public static var hexcase:uint = 0; /* hex output > format. 0 - > >> lowercase; 1 - uppercase */ > >> public static var b64pad:String = ""; /* base-64 pad > character. "=" > >> for strict RFC compliance */ > >> > >> public static function encrypt (string:String):String { > >> return hex_md5 (string); > >> } > >> > >> /* > >> * These are the functions you'll usually want to call > >> * They take string arguments and return either hex or > base-64 > >> encoded strings > >> */ > >> public static function hex_md5 (string:String):String { > >> return rstr2hex (rstr_md5 (str2rstr_utf8 > (string))); > >> } > >> > >> public static function b64_md5 (string:String):String { > >> return rstr2b64 (rstr_md5 (str2rstr_utf8 > (string))); > >> } > >> > >> public static function any_md5 (string:String, > >> encoding:String):String { > >> return rstr2any (rstr_md5 (str2rstr_utf8 > (string)), encoding); > >> } > >> public static function hex_hmac_md5 (key:String, > data:String):String > >> { > >> return rstr2hex (rstr_hmac_md5 (str2rstr_utf8 > (key), str2rstr_utf8 > >> (data))); > >> } > >> public static function b64_hmac_md5 (key:String, > data:String):String > >> { > >> return rstr2b64 (rstr_hmac_md5 (str2rstr_utf8 > (key), str2rstr_utf8 > >> (data))); > >> } > >> public static function any_hmac_md5 (key:String, > data:String, > >> encoding:String):String { > >> return > rstr2any(rstr_hmac_md5(str2rstr_utf8(key), str2rstr_utf8 > >> (data)), encoding); > >> } > >> > >> /* > >> * Perform a simple self-test to see if the VM is > working > >> */ > >> public static function md5_vm_test ():Boolean { > >> return hex_md5 ("abc") == > "900150983cd24fb0d6963f7d28e17f72"; > >> } > >> > >> /* > >> * Calculate the MD5 of a raw string > >> */ > >> public static function rstr_md5 (string:String):String { > >> return binl2rstr (binl_md5 (rstr2binl (string), > string.length * > >> 8)); > >> } > >> > >> /* > >> * Calculate the HMAC-MD5, of a key and some data (raw > strings) > >> */ > >> public static function rstr_hmac_md5 (key:String, > >> data:String):String { > >> var bkey:Array = rstr2binl (key); > >> if (bkey.length > 16) bkey = binl_md5 (bkey, > key.length * 8); > >> > >> var ipad:Array = new Array(16), opad:Array = new > Array(16); > >> for(var i:Number = 0; i < 16; i++) { > >> ipad[i] = bkey[i] ^ 0x36363636; > >> opad[i] = bkey[i] ^ 0x5C5C5C5C; > >> } > >> > >> var hash:Array = binl_md5 (ipad.concat (rstr2binl > (data)), 512 + > >> data.length * 8); > >> return binl2rstr (binl_md5 (opad.concat (hash), 512 + > 128)); > >> } > >> > >> /* > >> * Convert a raw string to a hex string > >> */ > >> public static function rstr2hex (input:String):String { > >> var hex_tab:String = hexcase ? "0123456789ABCDEF" : > >> "0123456789abcdef"; > >> var output:String = ""; > >> var x:Number; > >> for(var i:Number = 0; i < input.length; i++) { > >> x = input.charCodeAt(i); > >> output += hex_tab.charAt((x >>> 4) & 0x0F) > >> + hex_tab.charAt( x & 0x0F); > >> } > >> return output; > >> } > >> > >> /* > >> * Convert a raw string to a base-64 string > >> */ > >> public static function rstr2b64 (input:String):String { > >> var tab:String = > >> "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; > >> var output:String = ""; > >> var len:Number = input.length; > >> for(var i:Number = 0; i < len; i += 3) { > >> var triplet:Number = (input.charCodeAt(i) << 16) > >> | (i + 1 < len ? input.charCodeAt(i+1) > << 8 : 0) > >> | (i + 2 < len ? input.charCodeAt(i+2) > : 0); > >> for(var j:Number = 0; j < 4; j++) { > >> if(i * 8 + j * 6 > input.length * 8) output += > b64pad; > >> else output += tab.charAt((triplet >>> 6*(3-j)) & > 0x3F); > >> } > >> } > >> return output; > >> } > >> > >> /* > >> * Convert a raw string to an arbitrary string encoding > >> */ > >> public static function rstr2any(input:String, > >> encoding:String):String { > >> var divisor:Number = encoding.length; > >> var remainders:Array = []; > >> var i:Number, q:Number, x:Number, quotient:Array; > >> > >> /* Convert to an array of 16-bit big-endian values, > forming the > >> dividend */ > >> var dividend:Array = new Array(input.length / 2); > >> for(i = 0; i < dividend.length; i++) { > >> dividend[i] = (input.charCodeAt(i * 2) << 8) | > input.charCodeAt > >> (i * 2 + 1); > >> } > >> > >> /* > >> * Repeatedly perform a long division. The binary > array forms the > >> dividend, > >> * the length of the encoding is the divisor. Once > computed, the > >> quotient > >> * forms the dividend for the next step. We stop when > the dividend > >> is zero. > >> * All remainders are stored for later use. > >> */ > >> while(dividend.length > 0) { > >> quotient = []; > >> x = 0; > >> for(i = 0; i < dividend.length; i++) { > >> x = (x << 16) + dividend[i]; > >> q = Math.floor(x / divisor); > >> x -= q * divisor; > >> if(quotient.length > 0 || q > 0) > >> quotient[quotient.length] = q; > >> } > >> remainders[remainders.length] = x; > >> dividend = quotient; > >> } > >> > >> /* Convert the remainders to the output string */ > >> var output:String = ""; > >> for(i = remainders.length - 1; i >= 0; i--) > >> output += encoding.charAt (remainders[i]); > >> > >> return output; > >> } > >> > >> /* > >> * Encode a string as utf-8. > >> * For efficiency, this assumes the input is valid > utf-16. > >> */ > >> public static function str2rstr_utf8 > (input:String):String { > >> var output:String = ""; > >> var i:Number = -1; > >> var x:Number, y:Number; > >> > >> while(++i < input.length) { > >> /* Decode utf-16 surrogate pairs */ > >> x = input.charCodeAt(i); > >> y = i + 1 < input.length ? input.charCodeAt(i + 1) : > 0; > >> if(0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= > 0xDFFF) { > >> x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF); > >> i++; > >> } > >> > >> /* Encode output as utf-8 */ > >> if(x <= 0x7F) > >> output += String.fromCharCode(x); > >> else if(x <= 0x7FF) > >> output += String.fromCharCode(0xC0 | ((x >>> 6 ) & > 0x1F), > >> 0x80 | ( x & > 0x3F)); > >> else if(x <= 0xFFFF) > >> output += String.fromCharCode(0xE0 | ((x >>> 12) & > 0x0F), > >> 0x80 | ((x >>> 6 ) & > 0x3F), > >> 0x80 | ( x & > 0x3F)); > >> else if(x <= 0x1FFFFF) > >> output += String.fromCharCode(0xF0 | ((x >>> 18) & > 0x07), > >> 0x80 | ((x >>> 12) & > 0x3F), > >> 0x80 | ((x >>> 6 ) & > 0x3F), > >> 0x80 | ( x & > 0x3F)); > >> } > >> return output; > >> } > >> > >> /* > >> * Encode a string as utf-16 > >> */ > >> public static function str2rstr_utf16le > (input:String):String { > >> var output:String = ""; > >> for(var i:Number = 0; i < input.length; i++) > >> output += String.fromCharCode( input.charCodeAt(i) > & > >> 0xFF, > >> (input.charCodeAt(i) > >>> 8) & > >> 0xFF); > >> return output; > >> } > >> > >> public static function str2rstr_utf16be > (input:String):String { > >> var output:String = ""; > >> for(var i:Number = 0; i < input.length; i++) > >> output += String.fromCharCode((input.charCodeAt(i) > >>> 8) & > >> 0xFF, > >> input.charCodeAt(i) > & > >> 0xFF); > >> return output; > >> } > >> > >> /* > >> * Convert a raw string to an array of little-endian > words > >> * Characters >255 have their high-byte silently > ignored. > >> */ > >> public static function rstr2binl (input:String):Array { > >> var output:Array = new Array(input.length >> 2); > >> var i:Number; > >> for(i = 0; i < output.length; i++) > >> output[i] = 0; > >> for(i = 0; i < input.length * 8; i += 8) > >> output[i>>5] |= (input.charCodeAt(i / 8) & 0xFF) << > (i%32); > >> return output; > >> } > >> > >> /* > >> * Convert an array of little-endian words to a string > >> */ > >> public static function binl2rstr (input:Array):String { > >> var output:String = ""; > >> for(var i:Number = 0; i < input.length * 32; i += 8) > >> output += String.fromCharCode((input[i>>5] >>> (i % > 32)) & > >> 0xFF); > >> return output; > >> } > >> > >> /* > >> * Calculate the MD5 of an array of little-endian words, > and a bit > >> length. > >> */ > >> public static function binl_md5 (x:Array, > len:Number):Array { > >> /* append padding */ > >> x[len >> 5] |= 0x80 << ((len) % 32); > >> x[(((len + 64) >>> 9) << 4) + 14] = len; > >> > >> var a:Number = 1732584193; > >> var b:Number = -271733879; > >> var c:Number = -1732584194; > >> var d:Number = 271733878; > >> > >> for(var i:Number = 0; i < x.length; i += 16) { > >> var olda:Number = a; > >> var oldb:Number = b; > >> var oldc:Number = c; > >> var oldd:Number = d; > >> > >> a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936); > >> d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586); > >> c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819); > >> b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330); > >> a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897); > >> d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426); > >> c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341); > >> b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983); > >> a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416); > >> d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417); > >> c = md5_ff(c, d, a, b, x[i+10], 17, -42063); > >> b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162); > >> a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682); > >> d = md5_ff(d, a, b, c, x[i+13], 12, -40341101); > >> ... > >> > >> read more » > > > > > > > > > --~--~---------~--~----~------------~-------~--~----~ Você recebeu esta mensagem porque está inscrito na lista "flexdev" Para enviar uma mensagem, envie um e-mail para [email protected] Para sair da lista, envie um email em branco para [email protected] Mais opções estão disponíveis em http://groups.google.com/group/flexdev -~----------~----~----~----~------~----~------~--~---
