Необходима помощь (можно и платную) в портировании двух 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