ホームページ >バックエンド開発 >PHPチュートリアル >as3Crypto と php、なんて楽しいことでしょう!

as3Crypto と php、なんて楽しいことでしょう!

WBOY
WBOYオリジナル
2016-06-23 14:30:371148ブラウズ

実際にはそれほど楽しくはありませんでしたが、なんとかできました(これは私だけではなかったので、私たちと言うべきです)。暗号化は私の得意分野ではありません。えー、すべてがあなたの得意分野になるわけではないので、私はそれを受け入れます。ハッシュ関数、公開鍵、対称暗号など、学ぶべきことが多すぎます。私たちがやりたかったのは、As3 側でデータを暗号化し、php 側で復号化することでした。 as3corelib にいくつかの暗号アルゴリズムがあることは知っていましたが、それらのどれも (MD5、SHA-1) は私たちのニーズに適合しませんでした。もう 1 つ優れた暗号化ライブラリがあり、それが as3Crypto です。問題は、移動するのが少し難しいことであり、選択肢がたくさんあります。私たちは AES (Advanced Encryption Standard) に落ち着きました。動作させるために 2 時間試した後、Google グループでこの素晴らしい投稿を見つけました(ページの中央あたり)。人々が見つけやすいように、ここにコンテンツをコピーします。この投稿のすべての功績は、コードを投稿した Jason Foglia に与えなければなりません。

As3 クラスは次のとおりです:

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

1 つの暗号化メソッドを使用すると、データをもう 1 つのメソッドに送信し、同じキーを使用すれば他の言語で復号化できます。まるで魔法のように機能します。キーの長さは 8 文字のみであるという記述がありますが、私はそれをテストしていません。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。