Laravel 5 — Расшифровать Crypt::encrypt в Javascript

Я использую Crypt::encrypt для шифрования своих данных и передачи кода Javascript. Как я могу расшифровать данные в Javascript?


person hungneox    schedule 15.08.2015    source источник
comment
Почему бы вам сделать это в первую очередь?   -  person jedrzej.kurylo    schedule 15.08.2015
comment
Узнайте все характеристики шифрования, прежде чем пытаться повторить его.   -  person Artjom B.    schedule 15.08.2015
comment
@jedrzej.kurylo Я создаю игру на javascript и хочу отправлять защищенные данные во внешний интерфейс, чтобы пользователи не могли их изменить.   -  person hungneox    schedule 15.08.2015
comment
Даже если вы отправляете его в зашифрованном виде, вы также должны предоставить ключ дешифрования для Javascript, чтобы расшифровать его, поэтому, если пользователи захотят, они смогут расшифровать данные. Вы должны делать все проверки на стороне сервера   -  person jedrzej.kurylo    schedule 15.08.2015
comment
@ArtjomB. Хорошо, спасибо большое :)   -  person hungneox    schedule 15.08.2015
comment
@jedrzej.kurylo пытается сказать, что Криптография JavaScript считается вредоносной   -  person Artjom B.    schedule 15.08.2015
comment
Хотя это совершенно не имеет смысла как фактический уровень шифрования (поскольку вся информация для расшифровки информации находится в браузере), это именно то, что я искал, чтобы включить уровень неясности для некоторой конфиденциальной информации.   -  person joshwhatk    schedule 25.11.2015


Ответы (3)


Использование laravel 5.1 и CryptoJS, которые можно найти по адресу (https://code.google.com/p/crypto-js/).

в наборе .env:

  1. APP_KEY=uberkeythatrocks

в config/app.php установить:

  1. 'шифр' => 'AES-256-CBC'

в MyController.php:

  1. $mySecret = "Что-то, что я хочу скрыть от них";

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

в index.js:

  1. var key = "uberkeythatrocks";

  2. var decrypted = CryptoJS.AES.decrypt (зашифровано, ключ);

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

ВАЖНО: «Ключ» в PHP должен совпадать с «ключом» в JS, а «шифр» в PHP должен быть таким же в JS, однако CryptoJS автоматически выберет либо AES-128-CBC, либо AES-256-CBC в зависимости от на длину вашего «ключа». Хотя «шифр» по умолчанию в laravel 5.1 — это AES-256-CBC, поэтому я бы посоветовал вам получить «ключ» из файла .env для использования в JS.

Чтобы изменить или сгенерировать новый «ключ» из Laravel

  1. C:/mylaravel> php artisan key:generate [введите]

Чтобы использовать AES-128-CBC

  1. Отредактируйте config/app.php и установите «шифр» => «AES-128-CBC».

тогда

  1. C:/mylaravel> php artisan key:generate [введите]

ОБРАТИТЕ ВНИМАНИЕ, что изменение «ключа» будет означать, что существующий пароль для входа в учетную запись пользователя не будет работать, если вы не удалите пользователя, а затем не создадите нового.

НАДЕЮСЬ ЭТО ПОМОЖЕТ! :)

person wubsite    schedule 05.10.2015
comment
Есть ли способ сделать это наоборот, зашифровать в JS и расшифровать в Laravel 5.1? Я пытался, но получаю DecryptException in BaseEncrypter.php line 45:The payload is invalid. - person karmendra; 12.04.2017
comment
Мне помог сайт github.com/brainfoolong/cryptojs-aes-php. Это пример кода для использования cryptjs с Laravel, и он работает как шарм. - person karmendra; 13.04.2017
comment
какой файл нужно взять с code.google.com/p/crypto-js - person visulo; 27.02.2019
comment
Почему я получаю «пустую строку» при регистрации читаемой переменной, которая, как я ожидал, даст мне строку, которую я зашифровал? - person SMPLYJR; 07.02.2020

CryptoJs и Laravel 6 и 7.x

Поместите переменную Mix в файл .env.

MIX_APP_KEY=${APP_KEY}

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

В /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)); 
person SirCumz    schedule 29.04.2020

Я РЕШАЮ ЭТО:

Я использую Laravel Framework 5.7.28 и хочу расшифровать пароли некоторых пользователей в своем приложении node.js.

Для расшифровки в моем файле Js я включаю CryptoJS и Base64 JS

Вот код:

$key — это APP_KEY, который у вас есть в вашем файле .env.
$encrypted — это то, что вы шифруете с помощью 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));
person Pablo Salazar    schedule 18.07.2019
comment
Вы можете использовать нативную функцию atob вместо того, чтобы требовать пакет js-base64. И убедитесь, что вы удалили префикс base64: из ключа laravel. - person Nurul Huda; 24.09.2019