Шифрование в PHP и дешифрование в JS - AES256

Функция получит загруженный файл и зашифрует его для сохранения на сервере, я думаю об использовании openssl_encrypt.

Тип шифрования будет AES256.

После того, как веб-сервис будет запрошен, он вернет зашифрованный документ base 64, который будет расшифрован на стороне JS с использованием файла crypto-js.

Знаете, мой вопрос: как я могу выполнить процесс шифрования с помощью функции openssl_encrypt php?

Процесс шифрования:

  1. fopen
  2. зашифровать
  3. кодировать base64
  4. fwrite
  5. fclose

Процесс расшифровки:

  1. База декодирования 64
  2. Расшифровать
  3. Откройте PDF-документ

Я имею в виду описанные выше процессы, пожалуйста, поправьте меня, если я ошибаюсь или есть ошибка.

Этап 1:

Код PHP:

После обработки файла:

$encryptionMethod = "AES-256-CBC";
$secret = "1234567890@@@@@@@@@@123456789012";  //must be 32 char length
$iv = substr($secret, 0, 16);
$encryptedMessage = openssl_encrypt($textToEncrypt, $encryptionMethod, $secret,0,$iv);

На jquery для дешифрования не работает:

var ckey = "1234567890@@@@@@@@@@123456789012";
var decrypted = CryptoJS.AES.decrypt(data.content, ckey, { iv: "1234567890@@@@@@" });  

PDF-файл создается снова, но я не могу его открыть, отображается сообщение об ошибке «Acrobat не может открыть файл».

Почему я получаю это?


person Bruno    schedule 03.11.2015    source источник
comment
Что ж, вопрос уже проголосовал против, но никто не сказал почему! Это странно!   -  person Bruno    schedule 03.11.2015
comment
Вероятно, он был отклонен, потому что вы не показали ничего из того, что пытались сделать. До сих пор вы провели некоторое исследование (которое ясно), но на самом деле не пробовали. Сначала попробуйте, а затем задайте вопрос, если у вас есть конкретная проблема.   -  person samlev    schedule 03.11.2015
comment
Мой вопрос для знающих, можно ли выполнить шифрование AES256 с функцией openssl и расшифровать с помощью cryptojs?   -  person Bruno    schedule 03.11.2015
comment
Если они оба поддерживают AES256, тогда да, это возможно (хотя есть также различия, такие как выбор подходящего шифра и совместное использование ключа). Фактически, вы можете сделать систему небезопасной, поделившись ключом для расшифровки файла с пользователем в javascript, но я не знаю вашего варианта использования.   -  person samlev    schedule 03.11.2015
comment
Дело в том, что я хочу загрузить файл (PDF) и зашифровать его! После того, как другая система запросит WS, он вернет файл для расшифровки на JS! Итак, вы советуете использовать соответствующий шифр? Tks   -  person Bruno    schedule 03.11.2015
comment
Да, вы можете зашифровать в одном и расшифровать в другом, как видно из этого списка . Имейте в виду, что для удаленной защиты вам необходимо включить TLS: Криптография Javascript считается вредоносной   -  person Artjom B.    schedule 03.11.2015
comment
Некоторый потенциально полезный код в этом ответе: stackoverflow.com/questions/32507094/   -  person JamesG    schedule 04.11.2015


Ответы (1)


Шифрование / дешифрование работает!

СТОРОНА PHP ДЛЯ ШИФРОВАНИЯ

$encryptionMethod = "AES-256-CBC";
$secret = "1234567890@@@@@@@@@@123456789012";  //must be 32 char length
$iv = substr($secret, 0, 16);
$encryptedMessage = openssl_encrypt($textToEncrypt, $encryptionMethod, $secret,0,$iv);`

КРИПТОЙЫ ДЛЯ РАСШИФРОВКИ

var cipherParams = CryptoJS.lib.CipherParams.create({ciphertext: CryptoJS.enc.Hex.parse(data.toString())});
var decrypted = CryptoJS.AES.decrypt(cipherParams, CryptoJS.enc.Hex.parse(key), { iv: CryptoJS.enc.Hex.parse(iv) });
window.open("data:application/pdf;base64, " + btoa(decrypted.toString(CryptoJS.enc.Utf8)));
person Bruno    schedule 10.11.2015
comment
хорошо! Я добавил решение проблемы, о которой просил, и проголосовал за свой вопрос! невероятно, как здесь есть люди, которые просто голосуют и даже не проверяют весь пост! - person Bruno; 10.11.2015
comment
Это не очень интуитивно понятно. Какие переменные data, key и iv вы используете в JavaScript? Пожалуйста, объясни. - person Nick D; 14.06.2017