首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等效于as3crypto美学256-cbc

等效于as3crypto美学256-cbc
EN

Stack Overflow用户
提问于 2013-11-30 23:51:51
回答 2查看 1.4K关注 0票数 1

有谁知道php与as3crypto库的eX256-CBC密码的等效性是什么?我需要在as3和php中获得相同的结果,因为我的应用程序需要as3 <-> php数据交换。

这里是我的as3类:

代码语言:javascript
复制
    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='aes256-cbc';
            private var key:ByteArray;

            public function CryptoCode()
            {
                init();
            }

            private function init():void
            {
                    key = Hex.toArray(Hex.fromString('secret'));// can only be 8 characters long

                    //trace(encrypt('rower'));
                    //trace(decrypt(encrypt('TEST TEST'));
            }

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

            public 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类

代码语言:javascript
复制
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);
    }

}

它可以正常工作,简单的des Php和Flash输出相同的字符串,但美学256-cbc提供不同的字符串。

我遵循这个例子,Flash Encryption PHP Decryption,但我需要美学265-CBC,而不是简单的-des。

有谁可以帮我?

EN

回答 2

Stack Overflow用户

发布于 2013-12-02 19:25:19

一个快速的互联网搜索提供了以下内容:

代码语言:javascript
复制
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key,
                             $plaintext, MCRYPT_MODE_CBC, $iv);

这是我不久前重写的mcrypt_encrypt代码示例中的直接内容。

请注意,MCRYPT_RIJNDAEL_128与AES完全相同。您需要提供256位(32字节)的密钥才能将其用作AES-256。MCRYPT_RIJNDAEL_128中的128个是块大小,256个是AES-256中的关键大小.

请注意,到现在为止,PHP版本的-6年未维护的mcrypt库没有提供开箱即用的PKCS#7填充。因此,请查看下面的堆栈溢出块:

How to add/remove PKCS7 padding from an AES encrypted string?

票数 2
EN

Stack Overflow用户

发布于 2014-04-23 12:25:36

如果您想要一个好的php版本,在CBC + hashMac (基于mash的消息身份验证代码)中使用AES-256,可以随意检查我的小代码片段集(作为yiiframework插件实现,但只需查看index256.php类获得的信息)。

它将允许您使用AES-256使用私钥加密/解密字符串,避免某些攻击extension

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20307083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档