2012-05-06 14 views
1

フラッシュでの暗号化については、PHPで簡単に解読できるようにアドバイスしてください。フラッシュ用フラッシュ暗号化PHP復号化

+0

Depentsば完全にあなたのためにそれを使用しようとしているかについて。具体的に。 – Sietse

答えて

11

あなたはhttp://code.google.com/p/as3crypto/それが

  • RSA
    • をサポートDES
    • できAES
    • フグ -
    • はMD5
    • SHA
    • X509
    • RC4

    あなたはmycrypthttp://www.php.net/manual/en/mcrypt.examples.php RSA、DES、AES、Blowfishの、MD5、SHA、X509、RC4上記のすべての暗号化も

    のFlashクラスの例

    package 
    { 
         import flash.display.Sprite; 
         import flash.utils.ByteArray; 
    
         import com.hurlant.crypto.symmetric.ICipher; 
         import com.hurlant.crypto.symmetric.IVMode; 
         import com.hurlant.crypto.symmetric.IMode; 
         import com.hurlant.crypto.symmetric.NullPad; 
         import com.hurlant.crypto.symmetric.PKCS5; 
         import com.hurlant.crypto.symmetric.IPad; 
         import com.hurlant.util.Base64; 
         import com.hurlant.util.Hex; 
         import com.hurlant.crypto.Crypto; 
    
         public class CryptoCode extends Sprite 
         { 
           private var type:String='simple-des-ecb'; 
           private var key:ByteArray; 
    
           public function CryptoCode() 
           { 
             init(); 
           } 
    
           private function init():void 
           { 
             key = Hex.toArray(Hex.fromString('TESTTEST'));// can only be 8 characters long 
    
             trace(encrypt('TEST TEST')); 
             trace(decrypt(encrypt('TEST TEST')); 
           } 
    
           private function encrypt(txt:String = ''):String 
           { 
             var data:ByteArray = Hex.toArray(Hex.fromString(txt)); 
    
             var pad:IPad = new PKCS5; 
             var mode:ICipher = Crypto.getCipher(type, key, pad); 
             pad.setBlockSize(mode.getBlockSize()); 
             mode.encrypt(data); 
             return Base64.encodeByteArray(data); 
           } 
           private function decrypt(txt:String = ''):String 
           { 
             var data:ByteArray = Base64.decodeToByteArray(txt); 
             var pad:IPad = new PKCS5; 
             var mode:ICipher = Crypto.getCipher(type, key, pad); 
             pad.setBlockSize(mode.getBlockSize()); 
             mode.decrypt(data); 
             return Hex.toString(Hex.fromArray(data)); 
           } 
         } 
    
    } 
    

    をサポートを使用することができますPHP PHPクラスの例

    class Crypt 
    { 
         var $key = NULL; 
         var $iv = NULL; 
         var $iv_size = NULL; 
    
         function Crypt() 
         { 
           $this->init(); 
         } 
    
         function init($key = "") 
         { 
           $this->key = ($key != "") ? $key : ""; 
    
           $this->algorithm = MCRYPT_DES; 
           $this->mode = MCRYPT_MODE_ECB; 
    
           $this->iv_size = mcrypt_get_iv_size($this->algorithm, $this->mode); 
           $this->iv = mcrypt_create_iv($this->iv_size, MCRYPT_RAND); 
         } 
    
         function encrypt($data) 
         { 
           $size = mcrypt_get_block_size($this->algorithm, $this->mode); 
           $data = $this->pkcs5_pad($data, $size); 
           return base64_encode(mcrypt_encrypt($this->algorithm, $this->key, $data, $this->mode, $this->iv)); 
         } 
    
         function decrypt($data) 
         { 
           return $this->pkcs5_unpad(rtrim(mcrypt_decrypt($this->algorithm, $this->key, base64_decode($data), $this->mode, $this->iv))); 
         } 
    
         function pkcs5_pad($text, $blocksize) 
         { 
           $pad = $blocksize - (strlen($text) % $blocksize); 
           return $text . str_repeat(chr($pad), $pad); 
         } 
    
         function pkcs5_unpad($text) 
         { 
           $pad = ord($text{strlen($text)-1}); 
           if ($pad > strlen($text)) return false; 
           if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false; 
           return substr($text, 0, -1 * $pad); 
         } 
    } 
    

    使用フラッシュ

    // instance of crypto class 
    private var _crypto : CryptoCode; 
    public var myLoader : URLLoader; 
    
    // create instance with encryption key 
    _crypto = new CryptoCode("PASSWORD"); 
    
    // send crypted string to php script 
    var variables : URLVariables = new URLVariables(); 
    variables.message = _crypto.encrypt(tosend_in.text); 
    
    // create request with POST method 
    var request : URLRequest = new URLRequest("http://www.lecrabe.net/wordpress/demo/crypt/scripts/testcrypto.php"); 
    request.method = URLRequestMethod.POST; 
    request.data = variables; 
    
    // send request 
    myLoader.load(request); 
    

    使用PHP

    include_once "lib/cryptlib.php"; 
    
    // init a new instance of Crypto Class 
    $crypto = new Crypt; 
    
    // init with the encryption key 
    $result = $crypto->init("PASSWORD"); 
    
    // get the POST data 
    $messagefromflash = $_POST ["message"]; 
    
    // decrypt data 
    $decrypted_messagefromflash = $crypto->decrypt(utf8_decode($messagefromflash)); 
    
    +4

    警告:このコードでは、パスワードをキーとして使用しています。古くなったDES、安全でないモード(ECB)は、相互性保護を提供しません。コードは正しく動作するかもしれませんが、確かに** NOT SECURE **です。 –