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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/32025279/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 12:11:36  来源:igfitidea点击:

Laravel 5 - Decrypt Crypt::encrypt in Javascript

javascriptphplaravelcryptojs

提问by hungneox

I'm using Crypt::encryptto encrypt my data and feed to Javascript code. How can I decrypt the data in Javascript?

我正在使用Crypt::encrypt加密我的数据并提供给 Javascript 代码。如何在 Javascript 中解密数据?

回答by wubsite

Using laravel 5.1 and CryptoJS which can be found at (https://code.google.com/p/crypto-js/).

使用 laravel 5.1 和 CryptoJS,可以在 ( https://code.google.com/p/crypto-js/)找到。

in .env set:

在 .env 集中:

  1. APP_KEY=uberkeythatrocks
  1. APP_KEY=uberkeythatrocks

in config/app.php set:

在 config/app.php 中设置:

  1. 'cipher' => 'AES-256-CBC'
  1. '密码' => 'AES-256-CBC'

in MyController.php:

在 MyController.php 中:

  1. $mySecret = "Something I wanna hide from them";

  2. $encrypted = Crypt::encrypt($mySecret);

  1. $mySecret = "我想对他们隐瞒的事情";

  2. $encrypted = Crypt::encrypt($mySecret);

in index.js:

在 index.js 中:

  1. var key = "uberkeythatrocks";

  2. var decrypted = CryptoJS.AES.decrypt(encrypted, key);

  3. var readable = decrypted.toString(CryptoJS.enc.Utf8);

  1. var key = "uberkeythatrocks";

  2. var 解密 = CryptoJS.AES.decrypt(encrypted, key);

  3. var 可读 = 解密.toString(CryptoJS.enc.Utf8);

IMPORTANT: The 'key' in PHP must be the same with 'key' in JS and the 'cipher' in PHP must be the same in JS however, CryptoJS will automatically select either AES-128-CBC or AES-256-CBC depending on the length of your 'key'. Although laravel 5.1 default 'cipher' is AES-256-CBC so I would suggest you get your 'key' from .env file to use in JS.

重要提示:PHP 中的“密钥”必须与 JS 中的“密钥”相同,PHP 中的“密码”必须与 JS 中的相同,但是,CryptoJS 将根据情况自动选择 AES-128-CBC 或 AES-256-CBC关于“密钥”的长度。虽然 laravel 5.1 默认的“密码”是 AES-256-CBC,所以我建议你从 .env 文件中获取你的“密钥”以在 JS 中使用。

To change or generate a new 'key' from Laravel

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

  1. C:/mylaravel> php artisan key:generate [enter]
  1. C:/mylaravel> php artisan key:generate [输入]

To use AES-128-CBC

使用 AES-128-CBC

  1. Edit config/app.php and set 'cipher' => 'AES-128-CBC'
  1. 编辑 config/app.php 并设置 'cipher' => 'AES-128-CBC'

then

然后

  1. C:/mylaravel> php artisan key:generate [enter]
  1. C:/mylaravel> php artisan key:generate [输入]

NOTE that the change of 'key' will mean that an existing user account login password will not work unless you delete the user and then create new.

请注意,更改“密钥”将意味着现有用户帐户登录密码将不起作用,除非您删除该用户然后创建新用户。

HOPE THIS HELPS! :)

希望这可以帮助!:)

回答by Pablo Salazar

I SOLVE THIS:

我解决这个问题:

I'm using Laravel Framework 5.7.28 and i want to decrypt some users passwords in my node.js application

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

For Decrypt in my Js file i include CryptoJSand Base64 JS

Here is the code:

对于我的 Js 文件中的解密,我包括CryptoJSBase64 JS

这是代码:

$keyis the APP_KEY that you have in your .env file
$encryptedis what you encrypt with the Crypt::encryptin laravel

$key是您在 .env 文件中的 APP_KEY
$encrypted是您在 laravel 中使用Crypt::encrypt 加密的内容

var CryptoJS = require("crypto-js");
var Base64 = require('js-base64').Base64;


var encrypted = '{{ $encrypted }}';
var key = "{{ $key }}";

var encrypted_json = JSON.parse(Base64.decode(encrypted));


// Now I try to decrypt it.
var decrypted = CryptoJS.AES.decrypt(encrypted_json.value, CryptoJS.enc.Base64.parse(key), {
       iv : CryptoJS.enc.Base64.parse(encrypted_json.iv)
});

console.log(decrypted.toString(CryptoJS.enc.Utf8));

回答by SirCumz

CryptoJs and Laravel 6 & 7.x

CryptoJs 和 Laravel 6 & 7.x

Place a Mix variable inside .envfile

.env文件中放置一个 Mix 变量

MIX_APP_KEY=${APP_KEY}

See: https://laravel.com/docs/7.x/mix#environment-variables

请参阅:https: //laravel.com/docs/7.x/mix#environment-variables

In /resources/assets/js/app.jsadd:

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

And finally somewhere in your script you can decrypt like so:

最后在你的脚本中的某个地方,你可以像这样解密:

console.log(decrypt(encrypted_text));