Используйте функции Common Crypto. Документация находится на страницах руководства, так что вам придется немного поискать ее. Они находятся в libSystem на iOS и Mac OS X, поэтому нет необходимости добавлять другую библиотеку или фреймворк в ваш проект. Как видно из приведенного ниже примера, API очень похож на OpenSSL.
Если вы действительно заинтересованы в шифровании, в отличие от аутентификации данных, Common Crypto имеет функции для выполнения AES и 3DES (и DES, но не используйте его, он слишком слаб для современных нужд). Для получения подробной информации обратитесь к справочной странице CCCryptor .
Пример ниже эквивалентен выполнению openssl dgst -md5 -hmac secret < myfile.txt
. Начните с инициализации CCHmacContext, а затем вызовите CCHmacUpdate, если у вас есть данные для аутентификации. Когда вы прочитаете все байты, вызовите CCHmacFinal, чтобы получить HMAC в буфер. Я предоставил грубый метод преобразования байтов HMAC в печатаемый гекс.
#include <CommonCrypto/CommonHMAC.h>
#include <sys/types.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
extern int errno;
int
main( int ac, char *av[] )
{
CCHmacContext ctx;
char *key = "secret";
char buf[ 8192 ];
unsigned char mac[ CC_MD5_DIGEST_LENGTH ];
char hexmac[ 2 * CC_MD5_DIGEST_LENGTH + 1 ];
char *p;
int fd;
int rr, i;
if ( ac != 2 ) {
fprintf( stderr, "usage: %s path\n", av[ 0 ] );
exit( 1 );
}
if (( fd = open( av[ 1 ], O_RDONLY )) < 0 ) {
fprintf( stderr, "open %s: %s\n", av[ 1 ], strerror( errno ));
exit( 2 );
}
CCHmacInit( &ctx, kCCHmacAlgMD5, key, strlen( key ));
while (( rr = read( fd, buf, sizeof( buf ))) > 0 ) {
CCHmacUpdate( &ctx, buf, rr );
}
if ( rr < 0 ) {
perror( "read" );
exit( 2 );
}
CCHmacFinal( &ctx, mac );
(void)close( fd );
p = hexmac;
for ( i = 0; i < CC_MD5_DIGEST_LENGTH; i++ ) {
snprintf( p, 3, "%02x", mac[ i ] );
p += 2;
}
printf( "%s\n", hexmac );
return( 0 );
}