Laravel 5-在Javascript中解密Crypt::encrypt

Laravel 5-在Javascript中解密Crypt::encrypt,javascript,php,laravel,cryptojs,Javascript,Php,Laravel,Cryptojs,我正在使用Crypt::encrypt加密我的数据并将其输入Javascript代码。如何在Javascript中解密数据?使用laravel 5.1和CryptoJS,可在()找到 在.env集合中: APP_KEY=uberkeythattrocks 在config/app.php集合中: “密码”=>“AES-256-CBC” 在MyController.php中: $mySecret=“我想对他们隐瞒的事情” $encrypted=Crypt::encrypt($mySecret) 在i

我正在使用
Crypt::encrypt
加密我的数据并将其输入Javascript代码。如何在Javascript中解密数据?

使用laravel 5.1和CryptoJS,可在()找到

在.env集合中:

  • APP_KEY=uberkeythattrocks
  • 在config/app.php集合中:

  • “密码”=>“AES-256-CBC”
  • 在MyController.php中:

  • $mySecret=“我想对他们隐瞒的事情”

  • $encrypted=Crypt::encrypt($mySecret)

  • 在index.js中:

  • var key=“uberkeythatrocks”

  • var decrypted=CryptoJS.AES.decrypt(加密,密钥)

  • var readable=decrypted.toString(CryptoJS.enc.Utf8)

  • 重要: PHP中的“key”必须与JS中的“key”相同,PHP中的“cipher”在JS中必须相同。但是,CryptoJS将根据“key”的长度自动选择AES-128-CBC或AES-256-CBC。尽管Laravel5.1默认的“密码”是AES-256-CBC,所以我建议您从.env文件中获取“密钥”,以便在JS中使用

    从Laravel更改或生成新的“密钥”

  • C:/mylaravel>php artisan键:生成[输入]
  • 使用AES-128-CBC

  • 编辑config/app.php并设置“cipher”=>“AES-128-CBC”
  • 然后

  • C:/mylaravel>php artisan键:生成[输入]
  • 请注意,“密钥”的更改将意味着现有用户帐户登录密码将不起作用,除非您删除该用户,然后创建新密码


    希望这有帮助!:)

    我解决了这个问题:

    我使用的是Laravel Framework 5.7.28,我想解密node.js应用程序中的一些用户密码

    为了在我的Js文件中解密,我包括和

    代码如下:

    $key是您在.env文件中拥有的应用程序密钥
    $encrypted是使用laravel中的Crypt::encrypt加密的内容

    CryptoJs和Laravel 6和7.x 在.env文件中放置一个Mix变量

    MIX_APP_KEY=${APP_KEY}
    
    见:

    /resources/assets/js/app.js中添加:

    const CryptoJS = require("crypto-js");
    
    window.decrypt = (encrypted) => {
        let key = process.env.MIX_APP_KEY.substr(7);
        var encrypted_json = JSON.parse(atob(encrypted));
        return CryptoJS.AES.decrypt(encrypted_json.value, CryptoJS.enc.Base64.parse(key), {
            iv : CryptoJS.enc.Base64.parse(encrypted_json.iv)
        }).toString(CryptoJS.enc.Utf8);
    };
    
    最后,在脚本的某个地方,您可以这样解密:

    console.log(decrypt(encrypted_text)); 
    

    首先,你为什么要这么做?在你尝试复制它之前,先找出所有的问题。@jedrzej.kurylo我创建了一个javascript游戏,我想将受保护的数据发送到前端,以避免被用户修改。即使你发送加密的数据,你也必须向javascript提供解密密钥,以便对其进行解密,因此如果用户希望他们能够解密数据。你应该在服务器端做所有的检查@jedrzej.kurylo想说的是,有没有其他方法可以做到这一点,在JS中加密,在Laravel 5.1中解密?我试过了,但在BaseEncrypter.php第45行中不断出现
    DecryptException:有效负载无效。
    我得到了来自的帮助。这是将cryptjs与Laravel一起使用的示例代码,它工作起来很有魅力。应该从Why I Get when logging readable var中获取什么文件,我希望它能给我加密的字符串?您可以使用本机
    atob
    函数,而不需要“js-base64”包。并确保从laravel键中删除
    base64:
    前缀。
    console.log(decrypt(encrypted_text));