Я пытаюсь отправить данные в API. Они хотят, чтобы он был зашифрован перед отправкой.
Документация гласит:
Генерация секретного ключа с использованием алгоритма AES (с SHA-1 Функция HMa c по схеме PKCS 5 V2.0 - я не знаю, что это значит.
Шифрование данных с помощью этого ключа (data - json_string) (PADDING_PKCS1 = 11 и длина ключа составляет 2048 бит)
Шифрование private_key с использованием алгоритма RSA с ключом publi c (нам дали файл pem)
Затем отправьте эти зашифрованные данные в формате 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, и преобразовал их в шестнадцатеричный формат. Вуаля! Это сработало.