Зашифровать nsdata в iphone и расшифровать в php

Я новичок в разработке для Iphone, я хочу создать приложение, в котором мне нужно загрузить некоторые данные на php-сервер, используя мое приложение для Iphone. Для этого у меня есть файл на Iphone, содержимое которого я должен загрузить на php-сервер. Для этого я преобразовал содержимое файла в NSData, и теперь я хочу зашифровать этот объект nsdata, а затем передать его на php-сервер, а на php-сервере сначала мне нужно расшифровать объект nsdata, а затем загрузить его на сервер. .

Но я не могу найти способ, которым я могу зашифровать некоторые данные в приложении Iphone, а затем расшифровать их в php.

А также я хочу сжать зашифрованные данные перед передачей их на php, а затем распаковать эти данные на php.

Полный поток моего приложения

           IPhone

NSData --> Зашифрованные NsData --> Сжатые зашифрованные данные

           php

Сжатые зашифрованные данные --> несжатые зашифрованные данные --> расшифрованные (исходные) NSData.

Может ли кто-нибудь помочь мне, как я могу разработать такое приложение?

Заранее спасибо.

Гаурав


person Gaurav Arora    schedule 20.02.2010    source источник


Ответы (2)


Лучшим способом, вероятно, было бы зашифровать NSData с помощью криптосистемы с открытым ключом, распространить открытый ключ с приложением, зашифровать, тогда только ваше PHP-приложение сможет расшифровать с помощью закрытого ключа.

В PHP вы можете использовать OpenSSL для реализации шифрования с открытым/закрытым ключом.

$key = openssl_pkey_get_private('file:///path/to/my/secure/privatekey', $my_secure_passphrase);
openssl_private_decrypt($nsdata, $decrypted_data, $key);

openssl_private_decrypt() невероятно полезен тем, что только он может расшифровать NSData с ваших телефонов, если только у вас есть закрытый ключ. Я не уверен, что у iPhone есть способ шифрования, но я уверен, что есть способ шифрования с использованием открытого ключа.

person Xorlev    schedule 20.02.2010

Возможно, вы захотите взглянуть на поддержку шифрования AES в CommonCrypto.

Я бы предложил написать категорию для NSData, которая обрабатывает шифрование. Учитывая, что вам необходимо иметь возможность взаимодействовать между различными системами, обязательно разберитесь с понятиями «соль» и «вектор начального значения (IV)».

Как сказал Хорлев, наилучшая безопасность достигается при использовании шифрования с открытым ключом.

Позаботьтесь о том, как openssl хранит соль, перед зашифрованными данными. что-то типа:

строка «Salted__», за которой следует 8-байтовая соль и зашифрованные данные.

Если вам не нужна надежная защита, просто используйте симметричную криптографию.

person dwery    schedule 20.02.2010