генерация ключа с паролем и солью, затем шифрование данных этим ключом (php) - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь отправить данные в API. Они хотят, чтобы он был зашифрован перед отправкой.

Документация гласит:

  1. Генерация секретного ключа с использованием алгоритма AES (с SHA-1 Функция HMa c по схеме PKCS 5 V2.0 - я не знаю, что это значит.

  2. Шифрование данных с помощью этого ключа (data - json_string) (PADDING_PKCS1 = 11 и длина ключа составляет 2048 бит)

  3. Шифрование private_key с использованием алгоритма RSA с ключом publi c (нам дали файл pem)

  4. Затем отправьте эти зашифрованные данные в формате json.

Они также дают файл DLL. Поэтому я декомпилировал его, и он использует библиотеку BouncyCastle.

Их основная функция - это:

this.aesService.GenerateKey(password_variable, salt_file_contents_as_bytes); (they gives that both)
byte[] data1 = this.aesService.Encode(json_string);
byte[] data2 = this.rsaService.Encode(this.aesService.GetAesKey(), reads_public_keys_data_as_byte);
// and some http requests nothing special

То, что я попробовал, это;

1 - сгенерировал ключ, используя openssl_pbkdf2 * Функция 1037 * с их паролем и солью

$key = openssl_pbkdf2($password, $salt, 32, 20000, 'sha1');

2 - шифрует данные этим ключом с помощью openssl_encrypt function

$encryptedJson = openssl_encrypt($json_string, "AES256", $key);

3 - зашифрованный ключ, который я генерирую с помощью их ключа publi c с помощью функции openssl_public_encrypt

openssl_public_encrypt($key, $encryptedAes, $public_key, OPENSSL_PKCS1_PADDING);

4 - преобразовать эти результаты в шестнадцатеричный с помощью функции bin2hex и отправить его им

$jsonData = bin2hex($encryptedJson);
$keyData = bin2hex($encryptedAes);

Но он возвращает ошибку ( говорит, что недопустимый объект - я не знаю, что это значит ). Я спросил их об этом, но они еще не ответили.

Я хочу спросить вас:

Я правильно делаю? Использую ли я нужные функции для этих операций?

РЕДАКТИРОВАТЬ:

Они все еще не ответили. Но я просто добавил IV в начало зашифрованных данных, возвращаемых функцией openssl_encrypt, и преобразовал их в шестнадцатеричный формат. Вуаля! Это сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...