Criptografia-Descriptografia RSA no iphone

Estou desenvolvendo o aplicativo do Iphone. Eu usei o método SecKeyGeneratePair do framework Security / Security.h. Estou recebendo chaves públicas e privadas como objects SecKeyRef. Posso acessar a chave ou imprimir seu valor para o console? Posso obter o object NSString ou NSData dele? Quando eu imprimir a chave para consolar usando NSLog estou recebendo. Podemos passar esses objects-chave pela rede para outro aplicativo que pode estar em java? Podemos criptografar algum texto no aplicativo do iphone, enviá-lo para o servidor, usando a chave enviada descriptografar o texto no lado do servidor?

Editado para adicionar Obrigado Alex Reynolds pela sua resposta rápida. No caso da Criptografia RSA, primeiro tenho que gerar um par de chaves que esteja na forma de objects SecKeyRef. Em seguida, passaremos essa referência para os methods SecKeyEncrypt e SecKeyDecrypt. quando eu criptografo e descriptografar localmente está funcionando perfeito, mas se eu tentar enviar a chave e os dados criptografados para o servidor e descriptografar no lado do servidor (implementação java), eu não sou capaz de passar o object SecKeyRef para servidor como um valor de chave. Em java, temos que obter a string em string ou formato de matriz de bytes para passar para o método de criptografia. Podemos obter o access aos dados armazenados no object SecKeyRef (que é object NSCFType)? que é uma struct __SecKey.

Considere o uso de NSData para obter o valor de string e, talvez, use Base64 ou alguma outra forma de codificação ao passar pela rede (e, em seguida, decodificar de Base64 para qualquer coisa em Java).

Aqui está um exemplo de algum código que pode ajudar você a começar. Eu estou fazendo uma assinatura HMAC-SHA1 (‘digest’) aqui, mas a idéia geral é a mesma para o seu caso RSA:

#import  #import  #import  @interface NSString (NSStringAdditions) + (NSString *) base64StringFromData:(NSData *)data length:(int)length; - (NSString *) base64StringWithHMACSHA1Digest:(NSString *)secretKey; @end ------------------------------------------- #import "NSStringAdditions.h" static char base64EncodingTable[64] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' }; @implementation NSString (NSStringAdditions) - (NSString *) base64StringWithHMACSHA1Digest:(NSString *)secretKey { unsigned char digest[CC_SHA1_DIGEST_LENGTH]; char *keyCharPtr = strdup([secretKey UTF8String]); char *dataCharPtr = strdup([self UTF8String]); CCHmacContext hctx; CCHmacInit(&hctx, kCCHmacAlgSHA1, keyCharPtr, strlen(keyCharPtr)); CCHmacUpdate(&hctx, dataCharPtr, strlen(dataCharPtr)); CCHmacFinal(&hctx, digest); NSData *encryptedStringData = [NSData dataWithBytes:digest length:CC_SHA1_DIGEST_LENGTH]; free(keyCharPtr); free(dataCharPtr); return [NSString base64StringFromData:encryptedStringData length:[encryptedStringData length]]; } + (NSString *) base64StringFromData: (NSData *)data length: (int)length { unsigned long ixtext, lentext; long ctremaining; unsigned char input[3], output[4]; short i, charsonline = 0, ctcopy; const unsigned char *raw; NSMutableString *result; lentext = [data length]; if (lentext < 1) return @""; result = [NSMutableString stringWithCapacity: lentext]; raw = [data bytes]; ixtext = 0; while (true) { ctremaining = lentext - ixtext; if (ctremaining <= 0) break; for (i = 0; i < 3; i++) { unsigned long ix = ixtext + i; if (ix < lentext) input[i] = raw[ix]; else input[i] = 0; } output[0] = (input[0] & 0xFC) >> 2; output[1] = ((input[0] & 0x03) << 4) | ((input[1] & 0xF0) >> 4); output[2] = ((input[1] & 0x0F) << 2) | ((input[2] & 0xC0) >> 6); output[3] = input[2] & 0x3F; ctcopy = 4; switch (ctremaining) { case 1: ctcopy = 2; break; case 2: ctcopy = 3; break; } for (i = 0; i < ctcopy; i++) [result appendString: [NSString stringWithFormat: @"%c", base64EncodingTable[output[i]]]]; for (i = ctcopy; i < 4; i++) [result appendString: @"="]; ixtext += 3; charsonline += 4; if ((length > 0) && (charsonline >= length)) charsonline = 0; return result; } @end 
    Intereting Posts