Flash Encryption PHP Decryption

前端 未结 1 500
面向向阳花
面向向阳花 2020-12-18 16:31

Please advise for encryption in flash that can be decrypted easily in PHP.

相关标签:
1条回答
  • 2020-12-18 17:11

    For Flash you can http://code.google.com/p/as3crypto/ it supports

    • RSA
    • DES
    • AES
    • Blowfish -
    • MD5
    • SHA
    • X509
    • RC4

    PHP you can use mycrypt http://www.php.net/manual/en/mcrypt.examples.php RSA, DES, AES, Blowfish, MD5, SHA, X509, RC4 all the above encryption also supported

    Flash Class Example

    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 Class Example

    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);
            }
    }
    

    Usage flash

    // 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);
    

    Usage 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));
    
    0 讨论(0)
提交回复
热议问题