首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >crypto-js与php-mcrypt AES加密/解密

crypto-js与php-mcrypt AES加密/解密
EN

Stack Overflow用户
提问于 2014-07-22 00:05:56
回答 1查看 430关注 0票数 0

我试图写一个跨语言的加密/解密工具(JavaScript vs PHP/mcryp),但我有点卡住了。

你可以在这里找到我的js代码http://jsbin.com/siyesaqa/31/edit,而我的php代码是这样的:

代码语言:javascript
复制
class Manager
{

    /**
     * @param string $content
     * @param string $passphrase
     * @return string
     */
    public static function encrypt($plain, $passphrase = null) {
        $salt = mcrypt_create_iv(
            128 / 8,
            MCRYPT_DEV_URANDOM
        );
        $cipher = hash_pbkdf2(
            "sha256",
            $passphrase ? $passphrase : $_ENV['SECURITY_KEY'],
            $salt,
            100,
            128 / 8
        );
        $iv = mcrypt_create_iv(
            mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC),
            MCRYPT_RAND
        );
        $encrypted = mcrypt_encrypt(
            MCRYPT_RIJNDAEL_128,
            $cipher,
            $plain,
            MCRYPT_MODE_CBC,
            $iv
        );
        return base64_encode($salt) . base64_encode($iv) . base64_encode($encrypted);
    }

    /**
     * @param string $encContent
     * @param string $passphrase
     * @return string
     */
    public static function decrypt($encrypted, $passphrase = null) {
        $encrypted = base64_decode($passphrase ? $passphrase : $_ENV['SECURITY_KEY']);
        $salt = substr($encrypted, 0, 128 / 8);
        $cipher = hash_pbkdf2("sha256", $passphrase, $salt, 1000, 128 / 8);
        $iv = substr($encrypted, 128 / 8, 128 / 8);
        return trim(mcrypt_decrypt(
            MCRYPT_RIJNDAEL_128,
            $cipher,
            substr($encrypted, 128 / 8 * 2),
            MCRYPT_MODE_CBC,
            $iv
        ), "\0\t");
    }
}

正如您所注意到的,我在为salt和cipher变量返回相同的值时遇到了一些问题。

在这两个库方面有更多经验的人能给我一个提示吗?

非常提前感谢您。

EN

回答 1

Stack Overflow用户

发布于 2014-07-22 00:17:42

JavaScript加密函数十六进制对salt和IV进行编码,而PHP十六进制函数Base64对它们进行编码。不过,这两个函数Base64都对密文进行了编码。

此外,您的PHP解密函数似乎使用了1000轮PBKDF2,而所有其他函数都使用了100轮。

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

https://stackoverflow.com/questions/24869589

复制
相关文章

相似问题

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