Есть исходники ActionScript'a. в Graffiti.as есть такой код: [js] private function onSend(param1) { var ba:ByteArray; var e:* = param1; sendProgress.visible = true; var bd:* = drawingArea.bitmapData(); ba = PNGEncoder.encode(bd); ba.position = 0; var imageBytes:* = ba; var boundary:String; var header1:* = "--" + boundary + "\r\n" + "Content-Disposition: form-data; name=\"Signature\"\r\n\r\n" + ""; var header2:* = "\r\n--" + boundary + "\r\n" + "Content-Disposition: form-data; name=\"Filedata\"; filename=\"graffiti.png\"\r\n" + "Content-Type: image/png\r\n\r\n" + ""; var header3:* = "--" + boundary + "\r\n" + "Content-Disposition: form-data; name=\"Upload\"\r\n\r\n" + "Submit Query\r\n" + "--" + boundary + "--"; var headerBytes1:* = new ByteArray(); headerBytes1.writeMultiByte(header1, "ascii"); var headerBytes2:* = new ByteArray(); headerBytes2.writeMultiByte(header2, "ascii"); var headerBytes3:* = new ByteArray(); headerBytes3.writeMultiByte(header3, "ascii"); var imageCopyForSignature:* = new ByteArray(); imageCopyForSignature.writeBytes(imageBytes, 0, imageBytes.length); var signatureBytes:* = new ByteArray(); var dataString:* = Base64.encodeByteArray(imageCopyForSignature).substr(0, 1024); var signatureString:* = MD52.encrypt(dataString); signatureBytes.writeMultiByte(signatureString, "ascii"); var sendBytes:* = new ByteArray(); sendBytes.writeBytes(headerBytes1, 0, headerBytes1.length); sendBytes.writeBytes(signatureBytes, 0, signatureBytes.length); sendBytes.writeBytes(headerBytes2, 0, headerBytes2.length); sendBytes.writeBytes(imageBytes, 0, imageBytes.length); sendBytes.writeBytes(headerBytes3, 0, headerBytes3.length); var request:* = new URLRequest(postTo); request.data = sendBytes; request.method = URLRequestMethod.POST; request.contentType = "multipart/form-data; boundary=" + boundary; var loader:* = new URLLoader(); loader.addEventListener(Event.COMPLETE, uploadCompleted); loader.addEventListener(IOErrorEvent.IO_ERROR, uploadError); try { loader.load(request); } catch (error:Error) { sendProgress.visible = false; this.uploadError(null); } return; }// end function [/js] Меня интересует только генерация значения переменной signatureString Я думаю что: переменная ba - это строка PNG-картинка переменная dataString - это кусок строки, от зашифрованной в base64, картинки переменная signatureString - это md5-хеш переменной dataString Собственно мне нужно cгенерировать значение signatureString средствами php. Правда, я столкнулся с ActionScript в первый раз и пока, не совсем понимаю, что из себя представляют байт-массивы (ByteArray). Так-же не известно, насколько идентичны функции, представленные в этих исходниках, функциям PHP( md5 и base64_encode ). Исходники: http://www.devzirom.ru/vk/Graffiti_new.zip Прошу помощи, дорогие форумчане
Нет. Только маленький кусочек! Мне только хеш картинки нужен. Вот эта часть интересует: Код (Text): var dataString:* = Base64.encodeByteArray(imageCopyForSignature).substr(0, 1024); var signatureString:* = MD52.encrypt(dataString);
Пробовал так: <?php $file = file_get_contents('0.png'); $b64 = base64_encode($file); $str = substr($b64, 0, 1024); echo md5($str); ?> но хеш другой получается
Devzirom По логике: Вызывается объект base64, ему передаётся массив байт (в РНР можно использовать file_get_contents), затем из всей строки получаются 1024 символов и хешируются в MD5 Посмотри то, что было ДО хеша
Так и сделал =) Предполагаю, что там строка png картинки! Код (Text): Content-Type: multipart/form-data; boundary=----555-666-777 Content-Length: 1579 ----555-666-777 Content-Disposition: form-data; name="Signature" 44ddd659f8fcdae8c40222ba8aeecfb1 ----555-666-777 Content-Disposition: form-data; name="Filedata"; filename="graffiti.png" Content-Type: image/png ...PNG ..... ..... ----555-666-777 Content-Disposition: form-data; name="Upload" Submit Query ----555-666-777
Devzirom PHP: <?php $flash = base64_encode( iconv( "windows-1251", "utf-8", file_get_contents('image.png') ) );
Apple, неплохо, но <?php $file = iconv("windows-1251", "utf-8", file_get_contents('0.png')); // http://www.devzirom.ru/vk/0.png $b64 = base64_encode($file); $str = substr($b64, 0, 1024); echo md5($str); // 53e77da4a30495871fc278bf3a97fd92, Должно быть: 44ddd659f8fcdae8c40222ba8aeecfb1 ?> Проверил base64 тут(вроде asp) http://www.opinionatedgeek.com/dotnet/t ... fault.aspx идентично php