Чтение файлов

К проще доступу make-файла безопасность преобразовывает API, обеспечивает, чтение преобразовывает тот возврат содержание файла в a CFData объект. Путем объединения в цепочку этого преобразования с другими преобразованиями можно эффективно использовать читаемый поток файла, как введено для любых других, преобразовывают.

bullet
Для создания чтения преобразовывают объект
  1. Если Вы уже не имеете потока чтения, создаете или получаете a CFURLRef объект для исходного файла.

    Например, для чтения файла encrypt2_key в текущем рабочем каталоге Вы могли записать код как следующее:

    CFURLRef url = CFURLCreateFromFileSystemRepresentation (
            kCFAllocatorDefault,
            "encrypt2_key",
            12,
            false);
  2. Если у Вас уже нет потока чтения, создайте a CFReadStreamRef объект от этого CFURLRef.

    Например:

        CFReadStreamRef cfrs = CFReadStreamCreateWithFile(
                                    kCFAllocatorDefault,
                                    url);
  3. Вызвать SecTransformCreateReadTransformWithReadStream для создания чтения преобразовывают.

    Например:

        SecTransformRef readTransform = SecTransformCreateReadTransformWithReadStream(cfrs);

Если Ваш ключ шифрования является рядом необработанных байтов, можно теперь получить содержание файла как a CFData объект путем вызова SecTransformExecute или SecTransformExecuteAsync на преобразовании возражают следующим образом:

CFDataRef cfdatacryptokey = SecTransformExecute(readTransform, &error);

Если Ваш ключ шифрования находится в кодировании Base64, можно счесть полезным сгруппировать это преобразование с объектом декодера Base64. Например:

    /* Create the Base64 encoder object. */
    SecTransformRef decoder = SecDecodeTransformCreate(kSecBase64Encoding, &error);
    if (error) { CFShow(error); exit(-1); }
 
    /* Create the group transform object. */
    SecGroupTransformRef group = SecTransformCreateGroupTransform();
 
    /* Connect the output of the read transform
       to the input of the decoder using the
       group transform object. */
    SecTransformConnectTransforms(readTransform, kSecTransformOutputAttributeName,
        decoder, kSecTransformInputAttributeName, group, &error);
 
    /* Perform the group transform. */
    CFDataRef cfdatacryptokey = SecTransformExecute(group, &error);