Estoy buscando algo de cacao código de cifrado AES y yo hicimos un poco de búsqueda de google. He encontrado este enlace muy útil –
http://iphonedevelopment.blogspot.com/2009/02/strong-encryption-for-cocoa-cocoa-touch.html. Así que lo intenté pero no funcionó para mí.

¿Alguien puede sugerirme algún enlace útil o el código fuente que me puede ayudar a ponerlo en práctica en mi aplicación de ejemplo.

Lo usas, sería una buena idea ponerla (si no lo está ya) en un par de métodos para cifrar y descifrar, a continuación, crear un caso de prueba de que intenta cifrar y descifrar una cadena de ejemplo del uso de estos métodos así como su aplicación. Si la muestra sale por el otro extremo de comparar igual a la muestra original, usted sabe que está trabajando. Si no, usted sabe que está roto. (Mientras estás en ello, también la prueba de que el texto cifrado no se compara igual, o incluso contener una subcadena, el texto plano. realmente no quiero que se rompa.)
Creo que se debe utilizar cifrado OpenSSL. es muy bueno ver este deusty.blogspot.in/2007/01/using-openssl-in-cocoa.html

OriginalEl autor Devarshi | 2010-01-11

4 Comentarios

  1. 6

    Cifrado AES128 está disponible en el iPhone en el CommonCrypto marco. Las funciones son en el CommonCryptor.h encabezado.

    Puede crear un cryptor así:

    //Assume key and keylength exist
    CCCryptorRef cryptor;
    if(kCCSuccess != CCCryptorCreate(kCCEncrypt, kCCAlgorithmAES128, 0, key, keyLength, NULL, &cryptor))
      ; //handle error
    
    //Repeatedly call CCCryptorUpdate to encrypt the data
    
    CCCryptorRelease(cryptor);

    Parece que de la pregunta y el enlace que usted está buscando, por ejemplo, las implementaciones de la AES. Yo no recomendaría este uso de Apple de la aplicación!

    Parece http://pastie.org/297563.txt puede ayudar a usted también, pero yo no lo he probado.

    Gracias sbooth [pastie.org/297563.txt][1] es allí cualquier fuente para la base de 128 codificación/decodificación??
    Tenga en cuenta que la pasta tiene siempre un hard-coded clave de acceso restringido keyspace (es decir, es mucho más fácil adivinar que un completo keyspace clave), y no utiliza IV, por lo que es vulnerable a ataques de repetición. De uso simple, se ve muy bien escrito, pero no por algo que iba a ser atacado.

    OriginalEl autor sbooth

  2. 13

    Yo uso una simple categoría en NSData que utiliza la CommonCrypto marco para hacer el cifrado AES de 256 bits. Yo uso este en el Mac, pero debería funcionar bien en el iPhone:

    #import <CommonCrypto/CommonCryptor.h>
    @implementation NSData (AESAdditions)
    - (NSData*)AES256EncryptWithKey:(NSString*)key {
    //'key' should be 32 bytes for AES256, will be null-padded otherwise
    char keyPtr[kCCKeySizeAES256 + 1]; //room for terminator (unused)
    bzero(keyPtr, sizeof(keyPtr)); //fill with zeroes (for padding)
    //fetch key data
    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
    NSUInteger dataLength = [self length];
    //See the doc: For block ciphers, the output size will always be less than or
    //equal to the input size plus the size of one block.
    //That's why we need to add the size of one block here
    size_t bufferSize           = dataLength + kCCBlockSizeAES128;
    void* buffer                = malloc(bufferSize);
    size_t numBytesEncrypted    = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
    keyPtr, kCCKeySizeAES256,
    NULL /* initialization vector (optional) */,
    [self bytes], dataLength, /* input */
    buffer, bufferSize, /* output */
    &numBytesEncrypted);
    if (cryptStatus == kCCSuccess)
    {
    //the returned NSData takes ownership of the buffer and will free it on deallocation
    return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
    }
    free(buffer); //free the buffer;
    return nil;
    }
    - (NSData*)AES256DecryptWithKey:(NSString*)key {
    //'key' should be 32 bytes for AES256, will be null-padded otherwise
    char keyPtr[kCCKeySizeAES256 + 1]; //room for terminator (unused)
    bzero(keyPtr, sizeof(keyPtr)); //fill with zeroes (for padding)
    //fetch key data
    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
    NSUInteger dataLength = [self length];
    //See the doc: For block ciphers, the output size will always be less than or
    //equal to the input size plus the size of one block.
    //That's why we need to add the size of one block here
    size_t bufferSize           = dataLength + kCCBlockSizeAES128;
    void* buffer                = malloc(bufferSize);
    size_t numBytesDecrypted    = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
    keyPtr, kCCKeySizeAES256,
    NULL /* initialization vector (optional) */,
    [self bytes], dataLength, /* input */
    buffer, bufferSize, /* output */
    &numBytesDecrypted);
    if (cryptStatus == kCCSuccess)
    {
    //the returned NSData takes ownership of the buffer and will free it on deallocation
    return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
    }
    free(buffer); //free the buffer;
    return nil;
    }
    @end
    irsk, gracias por su respuesta! Sin embargo estamos frente a un mismo problema en el código que nos enfrentábamos con el código anterior!!
    Hola, yo uso NSBundle + pathForResource para la ruta de acceso y la elección de cifrar un archivo, pero ¿cómo me puedo conectar a la real de cifrado. Sé que es una pregunta estúpida, pero ¿cómo se llama el cifrar y descifrar NSData métodos a utilizar en un botón? Como [auto lo que sea], pero no puedo encontrar la entrada para ‘clave’ Gracias!
    Me he encontrado con este bloque de código un montón y tiene un número de problemas de seguridad. He escrito con algunos de reemplazo de aquí el código: robnapier.net/blog/aes-commoncrypto-564.

    OriginalEl autor Rob Keniger

  3. 2

    Todos los ejemplos que he encontrado no funciona para mí, así que me cambió la solución anterior. Esto funciona para mí y utiliza el Google-Lib para Base64 cosas:

    + (NSData *)AES256DecryptWithKey:(NSString *)key data:(NSData*)data encryptOrDecrypt:(CCOperation)encryptOrDecrypt {
    //'key' should be 32 bytes for AES256, will be null-padded otherwise
    char keyPtr[kCCKeySizeAES256+1]; //room for terminator (unused)
    bzero(keyPtr, sizeof(keyPtr)); //fill with zeroes (for padding)
    //fetch key data
    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
    if (encryptOrDecrypt == kCCDecrypt)
    {
    data = [GTMBase64 decodeData:data];
    }
    NSUInteger dataLength = [data length];
    //See the doc: For block ciphers, the output size will always be less than or 
    //equal to the input size plus the size of one block.
    //That's why we need to add the size of one block here
    size_t bufferSize = dataLength + kCCBlockSizeAES128;
    void *buffer = malloc(bufferSize);
    size_t numBytesDecrypted = 0;
    CCCryptorStatus cryptStatus = CCCrypt(encryptOrDecrypt,
    kCCAlgorithmAES128,
    kCCOptionPKCS7Padding,
    keyPtr,
    kCCKeySizeAES256,
    NULL /* initialization vector (optional) */,
    [data bytes], dataLength, /* input */
    buffer,       bufferSize, /* output */
    &numBytesDecrypted);
    if (cryptStatus != kCCSuccess){ 
    NSLog(@"ERROR WITH FILE ENCRYPTION /DECRYPTION");
    return nil;
    }
    NSData *result;
    if (encryptOrDecrypt == kCCDecrypt)
    {
    result = [NSData dataWithBytes:(const void *)buffer length:(NSUInteger)numBytesDecrypted];
    }
    else
    {
    NSData *myData = [NSData dataWithBytes:(const void *)buffer length:(NSUInteger)numBytesDecrypted];
    result = [GTMBase64 encodeData:myData];
    }
    free(buffer); //free the buffer;
    return result;
    }

    OriginalEl autor netshark1000

  4. 1

    gracias por la gran categoría de extensión. Una cosa que he descubierto – cuando se utiliza CCCrypt con un algoritmo más fuerte luego de 64 bits, deberá ser compatible con el BIS de los reglamentos de exportación. Ver el iTunes Connect FAQ para más detalles. Incluso si usted usa Apple inbuild crypto api que usted necesita para obtener la aprobación de la BIS.

    Hubo un debate sobre sf acerca de este tema antes de que (en el contexto de uso de ssl):

    El uso de SSL en una Aplicación para el iPhone – Cumplimiento de normas de Exportación

    Saludos
    Chris

    OriginalEl autor Chris

Dejar respuesta

Please enter your comment!
Please enter your name here