Необходима помощь в портировании двух php функций

php
swift

#1

Необходима помощь (можно и платную) в портировании двух php функций на swift. Необходимо сохранить всю логику представленного ниже php кода, так как требуется совместимость ios приложения и запросов к внешним php скриптам.

function decrypt($data, $key)
{
    $data = base64_decode($data);
    $ivlen = openssl_cipher_iv_length($cipher="aes-256-cbc");
    $iv = substr($data, 0, $ivlen);
    $hmac = substr($data, $ivlen, $sha2len=32);
    $ciphertext_raw = substr($data, $ivlen+$sha2len);
    $original_plaintext = openssl_decrypt($ciphertext_raw, $cipher, $key, $options=OPENSSL_RAW_DATA, $iv);
    $calcmac = hash_hmac('sha256', $ciphertext_raw, $key, $as_binary=true);
    if (hash_equals($hmac, $calcmac))
    {
$data = $original_plaintext;
    }  
    return $data;
}

function encrypt($data, $key)
{
    $ivlen = openssl_cipher_iv_length($cipher="aes-256-cbc");
    $iv = openssl_random_pseudo_bytes($ivlen);
    $ciphertext_raw = openssl_encrypt($data, $cipher, $key, $options=OPENSSL_RAW_DATA, $iv);
    $hmac = hash_hmac('sha256', $ciphertext_raw, $key, $as_binary=true);
    return base64_encode($iv.$hmac.$ciphertext_raw);
}

$key="12345678"; //в работе строка в 512 символов
$data="test string"; //шифруемые данные

$encrypt_data = encrypt($data, $key);
print_r($encrypt_data);

//пример зашифрованной строки из $encrypt_data
$crypto_string="riGv+ZOmmDhk02WOBCUbcPR1iVTfU0uiaZ6H16APgeSfMUu7Qn9P/FBD6YNNOA4imWo9TkaxyohRb1ICPfn/tg==";

$decrypt_data=decrypt($crypto_string, $key);
print_r($decrypt_data); //получаем содержимое $data - test string

#2

Глупая затея конвертировать серверный код в клиентский.
Если у вас на сервере и так PHP крутится, не проще было бы эти функции использовать на сервере, а с приложения просто посылать чистые данные.


#3

Есть единый механизм шифрования, который в nodejs, php используется и поддерживается. Неразумно посылать “чистые данные”, если можно послать их зашифрованными из клиента.


#4

Ну это уже совсем другой вопрос. Изначально не было сказано для чего это нужно.

Попробуйте взглянуть на это

Если не доверяете библиотеке

Или готовый вариант, немного подправив под себя